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-Key: 318968

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

Printed on: April 18, 2024 at 06:04 o'clock

Member: colinardo
colinardo Oct 24, 2016 updated at 16:56:08 (UTC)
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
Member: Crank69
Crank69 Oct 24, 2016 at 16:16:29 (UTC)
Goto Top
Danke Uwe

leider habe ich Powershell 2.0 , sry habe ich vergessen zu schreiben
Member: colinardo
colinardo Oct 24, 2016 updated at 16:56:01 (UTC)
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.
Member: Crank69
Crank69 Oct 25, 2016 at 12:43:03 (UTC)
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
Member: colinardo
colinardo Oct 25, 2016 at 12:47:13 (UTC)
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.
Member: Crank69
Crank69 Oct 26, 2016 at 07:21:42 (UTC)
Goto Top
danke das hilft mir schon weiter dann werde ich mal schauen ob ich was hinbekomme für powershell 2.0
Member: colinardo
colinardo Oct 26, 2016 updated at 08:05:13 (UTC)
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
Member: Crank69
Crank69 Oct 27, 2016 at 05:09:22 (UTC)
Goto Top
hallo Uwe danke für die mühe.