Compare-Object with different property names

This topic contains 3 replies, has 3 voices, and was last updated by  Sam Boutros 3 weeks, 2 days ago.

  • Author
    Posts
  • #90178

    ImAhNoBoDy
    Participant

    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"})
  • #90181

    Don Jones
    Keymaster

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

  • #90230

    ImAhNoBoDy
    Participant

    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.

  • #90233

    Sam Boutros
    Participant
    #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
    

You must be logged in to reply to this topic.