Multi CSV File Import Powershell
Hallo Zusammen,
ich komme gerade nicht weiter in meinen Powershell script
Ich möchte aus einer CSV Datei, in Powershell daten importieren.
Es sollen daten aus einer Tabelle importiert werden die nur ein gewissen wert entsprechen.
bsp:
Kunde;Nummer;Beschreibung
MusterCorp01;87654312;MusterCopretc01
MusterCorp02;27384628;MusterCorpetc02
MusterCorp03;23124238;MusterCorpetc03
So ist die CSV Datei aufgebaut.
Ich möchte aber nur den Kunde MusterCorp02 Filter, und dort dann nur die Nummer extrahieren.
Diese möchte ich dann weiter verwenden um mehrere CSV Files nach diese Nummer zu durchsuchen, und das Ergebnisse in Excel ausgeben.
Das ist der Grobe plan, ich scheitere aber schon am Anfang.
Wie ich die daten einlese in Powershell generell ist mir bekannt.
Dann sind die Daten wie oben in der Powershell gespeichert. Oder ist dieser Anfang schon falsch ?
dann habe ich das noch versucht.
Dann gibt er mir aber alle nummern aller Kunden aus, und nicht die eine die ich möchte.
Vielleicht hat jemand eine Idee
Gruß
ich komme gerade nicht weiter in meinen Powershell script
Ich möchte aus einer CSV Datei, in Powershell daten importieren.
Es sollen daten aus einer Tabelle importiert werden die nur ein gewissen wert entsprechen.
bsp:
Kunde;Nummer;Beschreibung
MusterCorp01;87654312;MusterCopretc01
MusterCorp02;27384628;MusterCorpetc02
MusterCorp03;23124238;MusterCorpetc03
So ist die CSV Datei aufgebaut.
Ich möchte aber nur den Kunde MusterCorp02 Filter, und dort dann nur die Nummer extrahieren.
Diese möchte ich dann weiter verwenden um mehrere CSV Files nach diese Nummer zu durchsuchen, und das Ergebnisse in Excel ausgeben.
Das ist der Grobe plan, ich scheitere aber schon am Anfang.
Wie ich die daten einlese in Powershell generell ist mir bekannt.
$Kunden = Import-Csv ".\Kunden.csv"
Dann sind die Daten wie oben in der Powershell gespeichert. Oder ist dieser Anfang schon falsch ?
dann habe ich das noch versucht.
ForEach ($Nummer in $Kunden){
if ($Kunden.Kunde -eq "MusterCorp02" ){
Write-Output $MusterCorp02.nummer
}
}
Dann gibt er mir aber alle nummern aller Kunden aus, und nicht die eine die ich möchte.
Vielleicht hat jemand eine Idee
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 665863
Url: https://administrator.de/forum/multi-csv-file-import-powershell-665863.html
Ausgedruckt am: 06.04.2025 um 10:04 Uhr
13 Kommentare
Neuester Kommentar
Moin,
richtig wäre es so:
besser wäre in diesem Fall allerdings, deine Liste vorher mit Where-Object zu prüfen.
So durchlaufen deine anderen Einträge erst gar nicht mehr die Foreach-Schleife.
Gruß Thomas
Zitat von @denethor34:
So ist die CSV Datei aufgebaut.
Wie ich die daten einlese in Powershell generell ist mir bekannt.
Dann sind die Daten wie oben in der Powershell gespeichert. Oder ist dieser Anfang schon falsch ?
Fast. Du hast vergessen, dass Semikolon als Trennzeichen festzulegenSo ist die CSV Datei aufgebaut.
Wie ich die daten einlese in Powershell generell ist mir bekannt.
$Kunden = Import-Csv ".\Kunden.csv"
Dann sind die Daten wie oben in der Powershell gespeichert. Oder ist dieser Anfang schon falsch ?
$Kunden = Import-Csv -Delimiter ';' ".\Kunden.csv"
richtig wäre es so:
ForEach ($Nummer in $Kunden){
if ($Nummer.Kunde -eq "MusterCorp02" ){
Write-Host $Nummer.Kunde
}
}
besser wäre in diesem Fall allerdings, deine Liste vorher mit Where-Object zu prüfen.
ForEach ($Nummer in ($Kunden | Where-Object Kunde -eq 'MusterCorp02'){
write-host $Nummer.Kunde
}
Gruß Thomas
$Kunden = Import-Csv "c:\temp\Kunden.csv" -Delimiter ";" | Where-Object Kunde -eq "MusterCorp02"
write-Host $Kunden.Kunde, " ", $Kunden.Nummer, " ", $Kunden.Beschreibung
Edit:
Da war Thomas schneller.
Gibt es mehr als einen Treffer muss der write-Befehl bei mir auch in eine Schleife ;) oder so als Out-GridView
Import-Csv "c:\temp\Kunden.csv" -Delimiter ";" | Where-Object Kunde -eq "MusterCorp02" | ogv
Da würde ich gleich mit Select-String ran gehen.
Foreach ($Match in (Select-String '^MusterCorp02;' "C:\work\*.csv")) {
write-host "Kunde 'MusterCorp02' wurde gefunden in '$($Match.Filename)'"
$CSV = ConvertFrom-CSV -Input $Match.Line -d ';' -Header 'Kunde','Nummer','Beschreibung'
write-host Kundennummer: $CSV.Nummer
}
Das ist ein Regex-String.
Um das noch besser zu verstehen:
Regex Tutorial
Regex Legende
EDIT:
Ich nehme an, du willst auch die Excel-Formel mit Powershell einfügen? Solange du beim CSV-Format bleibst:
Bei Excel ist übrigens, abweichend von @GarfieldBonn's Beitrag, zwingend Semikolon als Trennzeichen zu verwenden. Andernfalls hängen die gesamten Zeilen zusammen und müssen mit Excel erst manuell nachträglich getrennt werden.
Was bedeuten die ^ und ? in der Zeile, wie auch die [23] ? der Rest ist mir soweit klar.
- ^ Bedeutet "Am Zeilenanfang"
- ? Bedeutet, das Zeichen vor dem Fragezeichen kommt 0 oder 1 mal vor. Könnte man auch weglassen, wenn du in deiner CSV-Datei immer double quotes als Feldbegrenzer benutzen würdest. In deinem Eingangspost hattest du allerdings eine CSV-Datei ohne double quotes gepostet.
- [23] ist eine Aufzählung von erlaubten Zeichen, hier also entweder 2 oder 3.
Um das noch besser zu verstehen:
Regex Tutorial
Regex Legende
EDIT:
Nun muss ich noch schauen das ich das Ergebnis wenn möglich in excel übergeben kann, für die ausrechnung, wenn jemand dazu ein tip hat, gerne her damit.
Ganz übersehen.Ich nehme an, du willst auch die Excel-Formel mit Powershell einfügen? Solange du beim CSV-Format bleibst:
[Array]$CSV = Foreach ($Match in (Select-String '^"?MusterCorp0[23]"?,' "C:\work\Files\*.csv")){
ConvertFrom-CSV -d ',' -Inp $Match.Line -Header 'Kunde','Kundennummer','Kosten'
}
$CSV += [pscustomobject]@{Kosten="=SUM(C2:C$($CSV.Count+1))"}
$CSV | Export-Csv -NoTypeInformation -delimiter ';' -path "C:\Test\Datei.csv"