This is a very quick cmdlet for getting attributes that does not match between two objects
<# .Synopsis Returns a list of all attributes that does not match between two objects #> function Get-MismatchedAttributes { [CmdletBinding()] [OutputType([boolean])] Param ( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$false, Position=0)] $ReferenceObject, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$false, Position=1)] $DifferenceObject, [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, Position=2)] [String[]] $Attributes = $null ) if($Attributes -eq $null) { $Attributes = @( $ReferenceObject | gm -MemberType NoteProperty | select -exp Name $DifferenceObject | gm -MemberType NoteProperty | select -exp Name ) | Sort -Unique } $Attributes | Where {$ReferenceObject.$($_) -ne $DifferenceObject.$($_)} } $obj1 = [PSCustomObject] @{ Attr1 = "abc" Attr2 = "def" Attr3 = "klm" } $obj2 = [PSCustomObject] @{ Attr1 = "abc" Attr2 = "okj" } Write-Host "Attributes that does not match, limited to Attr1 and Attr2" -ForegroundColor Red Get-MismatchedAttributes $obj1 $obj2 -Attributes "Attr1","Attr2" Write-Host "All attributes that does not match" -ForegroundColor Red Get-MismatchedAttributes $obj1 $obj2