none
2 CSV Dateien per Powershell auslesen RRS feed

  • Frage

  • Hallo Leute ich

    habe ein Problem mit dem auslesen

    $csv1 = Import-CSV 'D:\Test1.csv' -Delimiter ";" 
    $csv2 = Import-CSV 'D:\Test2.csv' -Delimiter ";" 
    Compare $csv1 $csv2 -Property IP -Passthru | export-csv 'D:\datei.csv' -Delimiter ';' -NoType -Encoding UTF8

    würde gerne in der ersten Test1 die IP und Hostname vergleichen in der Test2.

    Mein Problem ist das unterschiedliche Überschriften haben:

    Test1    IP und Asset: Name

    Test2    IP-Adresse und Host

    Gibt es eine Möglichkeit das es klappt habe es bei auch schon mit verschiedenen Symbolen hinter -Demiliter probiert.

    Wäre super wenn ihr mir helfen könntet

    Freitag, 14. Oktober 2016 10:06

Antworten

  • Du kannst eine der beiden CSV-en an die andere anpassen:

    $csv2 = $csv2 | Select-Object -Property Titel1,Titel2,usw ... , @{Name='Titel der entsprechenden Reihe im anderen CSV';Expression={$_.'Titel der entsprechneden Reihe in dieser CSV'}},'weitere Spaltentitel die Du brauchst', ....

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''


    Freitag, 14. Oktober 2016 11:49

Alle Antworten

  • Moin,

    also wie: In den Dateien sind an sich artgleiche Daten (IPv4-Adresse und Hostname), aber unterschiedlich betitelt?

    Dann könntest Du einfach die Dateizeilen vergleichen, sprich: Die Vergleichsobjekte mit Get-Content statt mit Import-CSV erzeugen...


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    Freitag, 14. Oktober 2016 10:26
  • Du kannst eine der beiden CSV-en an die andere anpassen:

    $csv2 = $csv2 | Select-Object -Property Titel1,Titel2,usw ... , @{Name='Titel der entsprechenden Reihe im anderen CSV';Expression={$_.'Titel der entsprechneden Reihe in dieser CSV'}},'weitere Spaltentitel die Du brauchst', ....

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''


    Freitag, 14. Oktober 2016 11:49
  • Morgen an alle

    BOfH,

    ich habe es versucht nach deiner Idee umzusetzen, aber leider habe ich glaube noch ein Fehler drin vielleicht kannst du mir da helfen.

    $csv1 = Import-CSV 'D:\IPM.csv' -Delimiter ";" $csv2 = Import-CSV 'D:\Host.csv' -Delimiter ";" $csv2 = $csv2 | Select-Object -Property IP-Adresse,Host , @{Name=IP ;Expression={$_.Name=IP-Adresse}},@{Name=Asset: Name ;Expression={$_.Name=Host}} Compare $csv1 $csv2 -Property IP -Passthru | export-csv 'D:\datei.csv' -Delimiter ';' -NoType -Encoding UTF8


    Evgenij Smirnov:

    Ich habe es auch mal mit Get-Content probiert, aber da zeigt er mir leider nix an wegen IP oder Host.

    Ich muss sagen das ich mit Powershell 2.0 arbeite und weiß nicht wie entscheiden es ist.

    $csv1 = Get-Content  'D:\IPM.csv' -Delimiter ";" 
    $csv2 = Get-Content  'D:\Host.csv' -Delimiter ";" 
    Compare $csv1 $csv2 -Property IP -Passthru | export-csv 'D:\datei.csv' -Delimiter ';' -NoType -Encoding UTF8

    danke für die Zeit

    Montag, 24. Oktober 2016 06:00
  • Schau mal ... so müsste es eigentlich passen. Im Zweifel hilft es, sich die Fehlermeldung genau anzusehen, ODER sie hier zu posten.

    $csv1 = Import-Csv -Path 'D:\IPM.csv' -Delimiter ";" 
    $csv2 = Import-Csv -Path 'D:\Host.csv' -Delimiter ";" 
    $csv2 = $csv2 | Select-Object -Property Host, @{Name='IP';Expression={$_.'IP-Adresse'}}
    Compare-Object -ReferenceObject $csv1 -DifferenceObject $csv2 -Property IP -Passthru | 
        Export-Csv -Path 'D:\datei.csv' -Delimiter ';' -NoTypeInformation -Encoding UTF8
    


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Montag, 24. Oktober 2016 07:44
  • Danke für die schnelle Antwort Bofh,

    Es funktioniert aber er zeigt mir dann leider nur die zwei Spalten an.

    Ich dachte das er mir die anderen Spalten auch mit alle anzeigt aus der host.csv. SRY wenn ich es nicht so rübergebracht habe.

    Kann ich die IPs auch löschen die kein host Namen haben.

    Danke für die Zeit und Hilfe.

    Montag, 24. Oktober 2016 09:20
  • Es ging Dir also gar nicht um einen Vergleich, sondern darum die beiden Datentabellen miteinander zu kombinieren - richtig?

    $csv1 = Import-Csv -Path 'D:\IPM.csv' -Delimiter ";" 
    $csv2 = Import-Csv -Path 'D:\Host.csv' -Delimiter ";" 
    foreach ($csv1Item in $csv1) {
    	foreach ($csv2Item in $csv2) {
    	    If($csv1Item.IP -eq $csv2Item.'IP-Adresse'){
                $Ergebnis = [PSCustomObject]@{
                    'IP-Adresse' = $csv2Item.'IP-Adresse'
                    'Host' = $csv2Item.'Host'
                    'Asset: Name' = $csv1Item.'Asset: Name'
                }
            }
        }
    }
    
    Export-Csv -InputObject $Ergebnis -Path 'D:\datei.csv' -Delimiter ';' -NoTypeInformation -Encoding UTF8
    
    Damit dürfte Deine zweite Frage auch erledigt sein - richtig?  ;-)


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Montag, 24. Oktober 2016 10:16
  • danke für die Mühe :) habe jetzt mal Screenshot gemacht vielleicht kannst es dir besser vor stellen.

    Kann aber verstehen wenn keine Lust mehr hast beim helfen.

    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.

    Montag, 24. Oktober 2016 14:43
  • Das entwickelt sich so allmählich zu einer Zangengeburt hier ...  :-D  ... aber keine Angst - so lange Du freundlich fragst und Dich nicht im Ton vergreifst, wird Dir hier üblicherweise bis über die Ziellinie geholfen ... und manchmal auch noch weiter.  ;-) 

    Mit den Beispielen hättest Du jetzt auch eigentlich schon allein auf die Lösung kommen können ... na ma kukn:

    $Hostcsv = Import-Csv -Path 'D:\Host.csv' -Delimiter ";"
    $IPMcsv = Import-Csv -Path 'D:\IPM.csv' -Delimiter ";"
    $IPMcsv = $IPMcsv | Select-Object -Property *,@{Name='IP-Adresse';Expression={$_.IP}}
    
    Compare-Object -ReferenceObject $IPMcsv -DifferenceObject $Hostcsv -Property "IP-Adresse" -PassThru | 
        Where-Object -Property 'SideIndicator' -Value '=>' -EQ | 
            Export-Csv -Path 'D:\datei.csv' -Delimiter ';' -NoTypeInformation -Encoding UTF8
    ... und ... passt das?

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Montag, 24. Oktober 2016 17:35
  • danke schön klappt alles super
    Mittwoch, 26. Oktober 2016 04:50
  • Hallo Leute,

    ich habe ein ähnliches Problem.

    Bei mir ist es das ich 2 Spalten gleichzeitig vergleichen muss und die dann mit der anderen Datei überprüft werden muss. Ich benutze Powershell 2.0.

    Was müsste ich ändern damit ich 2 Spalten auslesen kann?

    danke für die Antwort

    Mittwoch, 26. Oktober 2016 05:47
  • Marcus,

    Deine Beschreibung ist etwas vage. Vielleicht machst Du einfach einen neuen Thread auf,  fängst von vorn an und beschreibst genauer, worum es geht und vielleicht, was Du schon gemacht hast.

    Apropos von vorn anfangen: Wenn Du vorhast, Powershell öfters als einmal zu benutzen, wäre es empfehlenswert, von vorn anzufangen. Ein guter Start könnte die Microsoft Virtual Academy sein: Windows Powershell für Einsteiger oder Einführung Powershell 4.0

    Und wenn es Dir immernoch um Deine Excel-Frage im Office-Forum geht, hilft Dir vielleicht das Excel-Modul weiter.


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH-666 Mittwoch, 26. Oktober 2016 07:27
    Mittwoch, 26. Oktober 2016 07:25
  • Danke für den Tipp leider arbeiten wir nur mit PS 2.0
    Donnerstag, 3. November 2016 11:47
  • 1. Powershell 2.0 - Oh mein Gott - warum nur?  Bitte sofort updaten! ;-)

    2. Die grundlegenden Techniken bleiben die gleichen. Also kann man die kostenlos zur Verfügung gestellten Einsteigerangebote ruhig annehmen. 

    Man kann bei Compare-Object auch zwei Properties angeben, die verglichen werden sollen. Wenn das nicht klappt, kann man es immernoch 'zu Fuß' machen, wie das hier in diesem Thread mit den verschachtelten Foreach-Schleifen zu sehen ist.


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 3. November 2016 12:19