derhoeppi
Goto Top

Powershell Compare-Object mit unterschiedlichen Attributen

Hallo,

bisher habe ich mit Compare-Object immer gute Erfahrungen gemacht, wenn es um den vergleich eindimensionaler Arrays ging. Jetzt habe ich ein mehrdimensionales Array (Name, Anmeldename, Benutzerrolle), welches ich mit einem anderen vergleichen möchte. Mein Problem ist nun das ich keine verlässlichen Unterschiede erhalte. Wenn ich aus meinem referenzierenden Array einen Eintrag lösche und beim differenzierenden Array einen hinzufüge, gibt es keine Unterschiede. Wenn ich nur im differenzieren Array einen Eintrag hinzufüge, bekomme ich mein gewünschtes Resultat.
Um mein Problem zu lösen, habe ich das Compare-Object auf $Array.Name gesetzt. Nun habe ich aber das Problem das ich keinen Unterschied erhalte, wenn sich die Rolle vom Benutzer geändert hat. Gibt es eine Möglichkeit den Vergleich durchzuführen? Ich habe bereits einen Versuch unternommen und mein Array mit ConvertTo-CSV umzuwandeln. Ich erhalte dann auch die Unterschiede, jedoch fehlt mir dabei der SideIndicator und letztlich auch der CSV Header, damit ich einen Eintrag auch mit Name, Anmeldename oder Role ansprechen kann.

Content-ID: 400607

Url: https://administrator.de/contentid/400607

Ausgedruckt am: 21.11.2024 um 16:11 Uhr

138721
Lösung 138721 06.02.2019 aktualisiert um 12:06:35 Uhr
Goto Top
Für Objekte mit mehreren Eigenschaften hat compare den Parameter -Property und -Passthru
face-wink
Doku lesen ist so einfach min Jung ... da braucht man doch keinen extra Thread. Vor allem Code ist trumpf und davon sieht man hier nichts.

Gruß l.
derhoeppi
derhoeppi 06.02.2019 um 13:44:02 Uhr
Goto Top
Danke für den Tipp zum Lesen der Doku. Ich habe es bis hierhin schon mit dem Parameter Passthru versucht, bin aber an diesem gescheitert. Nun habe ich den Parameter -Property hinzugefügt und dabei die Attribute des Array's aufgelistet. Aus meiner Sicht ist nun nichts anders als wenn ich den Parameter weggelassen hätte. Trotzdem funktioniert es.
138721
138721 06.02.2019 aktualisiert um 17:26:19 Uhr
Goto Top
Aus meiner Sicht ist nun nichts anders als wenn ich den Parameter weggelassen hätte
Ohhh das ist ein gewaltiger Unterschied, denn dieser Parameter definiert anhand welcher Eigenschaften die Objekte miteinander verglichen werden. Wird der Parameter nicht benutzt zieht die Powershell nur den Typ des gesamten Objekts zum Vergleich heran.
Sieht man schön an diesem Beispiel:
$obj1 = [pscustomobject]@{Name="Max";Nachname="Musterman"}  
$obj2 = [pscustomobject]@{}
compare $obj1 $obj1 -IncludeEqual
Zeigt beide Objekte als == an obwohl sie unterschiedlich sind, denn hier wird nur der Typ [pscustomobject] verglichen und der ist halt bei beiden Objekten gleich.