First of all apologies for the title which is a bit click baity – it’s because I spent a lot of time googling for this and couldn’t find what I needed, that had been done in the way I wanted it doing. This is like a digital notebook for me to come back to as a reminder!

The problem…

What I wanted to achieve is a straight forward way of taking two Powershell system array objects and combining them together into a new system.array in a similar way to how Excel does a VLOOKUP against two data series. So take $array1, match it against $array2 and produce $array3 that includes all the information from the original two arrays, combined together into a single object.

The solution…

Here’s how I did it:

[cc lang="powershell"]
$Combined = @()
foreach ($i in $inputfile) {
	foreach ($iter in $allusers) {
		if ($i.username -match $iter.samaccountname) {
			write-host "Match found between $($i.username) and $($iter.samaccountname)"
			$hash = @{
				Username   		=   $i.username
				NewDIR			=	$i.destination
				SamAccountName 	=   $iter.samaccountname
				CurrentDIR		=	$iter.homedirectory
			}
			$Build = New-Object PSObject -Property $hash
			$Total = $Total + 1
			$Combined += $Build
			}
		}
	}
Write-Host "Processed $Total records"
[/cc]