CSV Dateien auswerten mit Script
Hallo Leute,
habe ein Problem und hoffe ihr könnt mir helfen.
Ich hoffe das die Bilder helfen bei meinem Problem.
1te Host.csv
2te IPM.csv
3te ist das Ergebnis also Datei.csv
In der dritten Datei soll er mir nur die IP-Adressen und Host anzeigen die nicht in der IPM.csv Datei ist.
Das Problem ist ja das in Spalte D und E IP-Adresse und Host heißen in Host.csv .
In der IPM.csv ist spalte F und I und heißen IP und Asset: Name.
habe ein Problem und hoffe ihr könnt mir helfen.
Ich hoffe das die Bilder helfen bei meinem Problem.
1te Host.csv
2te IPM.csv
3te ist das Ergebnis also Datei.csv
In der dritten Datei soll er mir nur die IP-Adressen und Host anzeigen die nicht in der IPM.csv Datei ist.
Das Problem ist ja das in Spalte D und E IP-Adresse und Host heißen in Host.csv .
In der IPM.csv ist spalte F und I und heißen IP und Asset: Name.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 318968
Url: https://administrator.de/contentid/318968
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
8 Kommentare
Neuester Kommentar
Servus,
min. PS3.0
Grüße Uwe
Das Problem ist ja das in Spalte D und E IP-Adresse und Host heißen in Host.csv .
Das ist nicht das Problem min. PS3.0
$host_csv = Import-CSV 'C:\host.csv' -delimiter ";"
$ipm_csv = Import-CSV 'C:\ipm.csv' -delimiter ";"
$csv_out = 'C:\out.csv'
$host_csv | ?{$_.'IP-Adresse' -notin $ipm_csv.IP} | export-csv $csv_out -Delimiter ";" -NoType -Encoding UTF8
Auch kein Beinbruch, das nächste mal bitte aber direkt alle für uns nötigen Informationen.
Ersetze Zeile 4 durch folgende
PS2.0 tested
edit kleine Korrektur.
Ersetze Zeile 4 durch folgende
$host_csv | ?{($ipm_csv | select -Expand IP) -notcontains $_.'IP-Adresse'} | export-csv $csv_out -Delimiter ";" -NoTypeInformation -Encoding UTF8
edit kleine Korrektur.
Zitat von @Crank69:
Aber hätte nur noch ne frage und vielleicht kannst du sie mir ja beantworten wenn du zeit hast.
Meine frage ist kann man auch 2 Spalten aus der einen Csv nehmen und sie dann mit der anderen Csv datei vergleichen und dann die anzeigt die nicht übereinstimmen mit beiden spalten.
Kannst du compare-object ist dein Freund. Dort hast du den Parameter -Property in der du ein Array an Spaltennamen(Eigenschaften) angibst welche miteinander verglichen werden. Per Default gibt compare-object immer Differenzen aus.Aber hätte nur noch ne frage und vielleicht kannst du sie mir ja beantworten wenn du zeit hast.
Meine frage ist kann man auch 2 Spalten aus der einen Csv nehmen und sie dann mit der anderen Csv datei vergleichen und dann die anzeigt die nicht übereinstimmen mit beiden spalten.
Hier was zum luken für dich falls du es von selbst nicht schaffen solltest:
(Die Demodaten sind hier nur zum Test in den Code integriert kannst du natürlich durch die Import-CSV Anweisungen ersetzen, den Export als CSV habe hier nur zur Demonstration weggelassen, den kannst du ja durch einfaches anhängen an die Pipe selbst ergänzen)
Grüße Uwe
(Die Demodaten sind hier nur zum Test in den Code integriert kannst du natürlich durch die Import-CSV Anweisungen ersetzen, den Export als CSV habe hier nur zur Demonstration weggelassen, den kannst du ja durch einfaches anhängen an die Pipe selbst ergänzen)
Variante 1 mit Compare-Object
$csv1 = @"
Spalte1;Spalte2;IP-Adresse;Host
1;1;10.10.10.1;Host1
2;2;10.10.10.2;Host2
3;3;10.10.10.3;Host3
4;4;10.10.10.4;Host4
"@ | ConvertFrom-CSV -Delimiter ";"
$csv2 = @"
Spalte1;Spalte2;IP;Asset:Name
1;1;10.10.10.1;Host1
2;2;10.10.10.2;Host2
"@ | ConvertFrom-CSV -Delimiter ";"
# CSV 1 um Member der zweiten CSV ergänzen damit via compare verglichen werden kann
$csv1 = $csv1 | select *,@{n='IP';e={$_.'IP-Adresse'}},@{n='Asset:Name';e={$_.Host}}
# Vergleichen mit den Eigenschaften 'IP','Asset:Name' und nur die Objekte ausgeben die nur in der ersten CSV vorkommen
Compare $csv1 $csv2 -Property 'IP','Asset:Name' -PassThru | ?{$_.SideIndicator -eq '<='} | select 'Spalte1','Spalte2','IP-Adresse','Host'
Variante 2 nur mit where-object
$csv1 = @"
Spalte1;Spalte2;IP-Adresse;Host
1;1;10.10.10.1;Host1
2;2;10.10.10.2;Host2
3;3;10.10.10.3;Host3
4;4;10.10.10.4;Host4
"@ | ConvertFrom-CSV -Delimiter ";"
$csv2 = @"
Spalte1;Spalte2;IP;Asset:Name
1;1;10.10.10.1;Host1
2;2;10.10.10.2;Host2
2;2;10.10.10.3;Host3
"@ | ConvertFrom-CSV -Delimiter ";"
$csv1 | ?{$ip=$_.'IP-Adresse';$h=$_.Host;!($csv2 | ?{$_.IP -eq $ip -and $_.'Asset:Name' -eq $h})}