crank69
Goto Top

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
host

2te IPM.csv
ipm

3te ist das Ergebnis also Datei.csv
ergebnis

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.

Content-ID: 318968

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

colinardo
colinardo 24.10.2016 aktualisiert um 18:56:08 Uhr
Goto Top
Servus,
Das Problem ist ja das in Spalte D und E IP-Adresse und Host heißen in Host.csv .
Das ist nicht das Problem face-smile

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  
Grüße Uwe
Crank69
Crank69 24.10.2016 um 18:16:29 Uhr
Goto Top
Danke Uwe

leider habe ich Powershell 2.0 , sry habe ich vergessen zu schreiben
colinardo
colinardo 24.10.2016 aktualisiert um 18:56:01 Uhr
Goto Top
Zitat von @Crank69:
leider habe ich Powershell 2.0 , sry habe ich vergessen zu schreiben
Auch kein Beinbruch, das nächste mal bitte aber direkt alle für uns nötigen Informationen.

Ersetze Zeile 4 durch folgende
$host_csv | ?{($ipm_csv | select -Expand IP) -notcontains $_.'IP-Adresse'} | export-csv $csv_out -Delimiter ";" -NoTypeInformation -Encoding UTF8  
PS2.0 tested

edit kleine Korrektur.
Crank69
Crank69 25.10.2016 um 14:43:03 Uhr
Goto Top
Danke es klappt alles.

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.

Danke für die zeit
colinardo
colinardo 25.10.2016 um 14:47:13 Uhr
Goto Top
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.
Crank69
Crank69 26.10.2016 um 09:21:42 Uhr
Goto Top
danke das hilft mir schon weiter dann werde ich mal schauen ob ich was hinbekomme für powershell 2.0
colinardo
colinardo 26.10.2016 aktualisiert um 10:05:13 Uhr
Goto Top
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)

back-to-topVariante 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'  
back-to-topVariante 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})}  
Grüße Uwe
Crank69
Crank69 27.10.2016 um 07:09:22 Uhr
Goto Top
hallo Uwe danke für die mühe.