philipp711
Goto Top

Vergleich zweier CSV-Dateien über Powershell-Script

Hallo,

ich habe eine Verständnisfrage zur "Programmierung" eines Powershell-Scripts. Es geht darum, zwei Listen miteinander zu vergleichen bzw. herauszufinden ob ein Eintrag in Liste 1 auch in Liste 2 vorhanden ist.

Ein Konkretes Beispiel wäre z.B. die aktuelle Meltdown/Spectre Sicherheitslücke. Der Hersteller unserer Client- und Serversysteme hat eine Liste mit "affected Models" veröffentlicht. Durch das Inventarisierungssystem erhalte ich eine Liste unseres Inventars mit Modellbezeichnungen. Ziel ist es herauszufinden, welche Systeme konkret betroffen sind. Mein Gedanke war mit zwei verschachtelten schleifen das aktuelle Gerät aus der Inventarliste mit der kompletten "affected Liste" zu vergleichen. Bei einem Treffer soll dies ausgegeben werden.

Code:

Input Inventar.csv:


Input affected.csv:


Ergebnis:

-> PC01 & PC06 fehlen im Ergebnis...Ich verstehe allerdings nicht warum...

P.S.: Die Input-Listen sind zum bessern Überblick verkürzt. Im "Original" fehlen noch weitere Modelle/Computer

Content-Key: 361898

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

Printed on: December 4, 2022 at 13:12 o'clock

Mitglied: 135185
135185 Jan 21, 2018 updated at 16:04:32 (UTC)
Goto Top
Schleifen überflüssig.
Hier steht schon wie das geht, compare-object ist dein Freund ...
https://www.administrator.de/forum/auslesen-vergleichen-zweiter-csv-date ...

Einfach Mal unten unter deinem Thread in die Links schauen face-smile
PC01 & PC06 fehlen im Ergebnis...Ich verstehe allerdings nicht warum
Da sind gaaanz viele Leerzeichen am Ende der Zeile face-wink. Hier wäre dann trim() dein Freund.
Gruß Sepp
Member: Philipp711
Philipp711 Jan 21, 2018 updated at 17:05:03 (UTC)
Goto Top
Danke, der Trim() hilft - das war es! Allerdings möchte ich noch ein wenig weiter üben...ich würde die gefundenen Computer jetzt noch gerne in ein Array packen...zur weiteren Verarbeitung.

Dafür habe ich ein Array definiert


und in der IF-Verzweigung die Zeile hinzugefügt


Hier schmeißt er den Fehler raus


Auch hier verstehe ich nicht, warum er die Inhalte in einen Integer konvertieren will...
Mitglied: 135185
135185 Jan 21, 2018 updated at 19:16:43 (UTC)
Goto Top
Du stellst dir selbst ein Bein, schreib das Plus vor das Gleichheitszeichen ... dann jeht dat och.

Und Liste ist keine Variable,da hast du das Dollarzeichen vor dem Namen vergessen, das war aber vermutlich nur ein Typo.
Member: colinardo
colinardo Jan 22, 2018 updated at 09:33:01 (UTC)
Goto Top
Servus @Philipp711 ,
hier eine vereinfachte Variante um das ganze mit compare-object zu realisieren.
Compare-Object ist sehr mächtig, solltest du dir unbedingt mal ansehen. Ich nutze es fast täglich für den Vergleich von Objekten in der Powershell, spart einem mächtig viel Schreibarbeit.

Falls du dich fragst was das hier für ein Konstrukt ist:
Das nennt man calculated property und ist schnelle Methode einem Objekt in der Pipeline benutzerdefinierte Eigenschaften zu verpassen.

Grüße Uwe