Author Posts

December 28, 2017 at 8:54 pm

Is there a way to compare objects that do not have the same property names? I know how to do this if the property names were the same, but not if they are different

$people1 = 
@([pscustomobject]@{name="Robin";age=32;status="S"},
[pscustomobject]@{name="Tom";age=29;status="M"},
[pscustomobject]@{name="Ralph";age=12;status="D"})
$people2 = 
@([pscustomobject]@{firstname="Robin";age=32;info="S"},
[pscustomobject]@{firstname="Tom";age=29;info="M"},
[pscustomobject]@{firstname="Ralph";age=12;info="D"})

December 28, 2017 at 8:55 pm

Nope. You'll have to run them through Select-Object and rename the properties to normalize them.

December 29, 2017 at 12:50 pm

Whaaa??? I was using Select-Object yesterday to rename the Property to no avail. I restarted my computer this morning and Wahla, it works. I don't know......it's voodoo, haha. Thanks.

December 29, 2017 at 1:29 pm

#region Input
$people1 = @(
    [pscustomobject]@{name="Robin";age=32;status="S"},
    [pscustomobject]@{name="Tom";age=29;status="M"},
    [pscustomobject]@{name="Ralph";age=12;status="D"}
)

$people2 = @(
    [pscustomobject]@{firstname="Robin";age=32;info="S"},
    [pscustomobject]@{firstname="Tom";age=29;info="M"},
    [pscustomobject]@{firstname="Ralph";age=12;info="D"}
)
#endregion

# Normalize $people1 objects
$NormalizedPeople1 = $people1 | select @{n='firstname';e={$PSItem.name}},age,@{n='info';e={$PSItem.status}}

# Now both object arrays have the same properties: firstname, ago, info => normalized

# We can now use compare-object to compare $NormalizedPeople1 and $people2