Daten aus Powershell exportieren
Hallo zusammen
Ich habe ein Script geschrieben, welches Daten aus einem csv- File importiert, diese und diese ändert. Das Script funktioniert soweit einwandfrei und gibt die Daten schön aus. Hier das Script:
Das csv-File sieht ist so Aufgebaut:
Das Script liest nun jede Zeile aus, berechnet die tägliche Gesamtarbeitszeit für jede Person und gibt dies dann in der Shell aus:
Name = Walker
Vorname = John
Stempeldatum = 13.01.21
Zeit = 08:00:00
Name = Walker
Vorname = John
Stempeldatum = 14.01.21
Zeit = 10:00:00
Nun möchte ich diese Daten in ein neues csv-File abspeichern, weiss aber nicht wie ich das hinbekomme. Auch wäre es schön es so hinzubekommen, dass es am Schluss wieder so abgespeichert wird:
Bei Fragen oder fehlenden Infos meldet euch gerne und danke schonmal im Voraus!
Ich habe ein Script geschrieben, welches Daten aus einem csv- File importiert, diese und diese ändert. Das Script funktioniert soweit einwandfrei und gibt die Daten schön aus. Hier das Script:
clear
$table = Import-Csv -Path 'C:\Temp\Stempelungen\StempelungenJira.csv' -Delimiter ";"
$counter = 0
$tablelength = $table.count
while ($counter -lt $tablelength) {
$parts = $table[$counter] -split ';'
$name = $parts[4]
$prename = $parts[5]
$date = $parts[6]
$time = $parts[7]
$parts2 = $table[$counter + 1] -split ';'
$name2 = $parts2[4]
$prename2 = $parts2[5]
$date2 = $parts2[6]
$time2 = $parts2[7]
$parts3 = $table[$counter + 2] -split ';'
$name3 = $parts3[4]
$prename3 = $parts3[5]
$date3 = $parts3[6]
$time3 = $parts3[7]
$parts4 = $table[$counter + 3] -split ';'
$name4 = $parts4[4]
$prename4 = $parts4[5]
$date4 = $parts4[6]
$time4 = $parts4[7]
$parts5 = $table[$counter + 4] -split ';'
$name5 = $parts5[4]
$prename5 = $parts5[5]
$date5 = $parts5[6]
$time5 = $parts5[7]
$parts6 = $table[$counter + 5] -split ';'
$name6 = $parts6[4]
$prename6 = $parts6[5]
$date6 = $parts6[6]
$time6 = $parts6[7]
$name=$name -replace 'Name='
$name2=$name2 -replace 'Name='
$name3=$name3 -replace 'Name='
$name4=$name4 -replace 'Name='
$name5=$name5 -replace 'Name='
$name6=$name6 -replace 'Name='
$prename=$prename -replace 'Vorname='
$prename2=$prename2 -replace 'Vorname='
$prename3=$prename3 -replace 'Vorname='
$prename4=$prename4 -replace 'Vorname='
$prename5=$prename5 -replace 'Vorname='
$prename6=$prename6 -replace 'Vorname='
$date=$date -replace 'Stempeldatum='
$date2=$date2 -replace 'Stempeldatum='
$date3=$date3 -replace 'Stempeldatum='
$date4=$date4 -replace 'Stempeldatum='
$date5=$date5 -replace 'Stempeldatum='
$date6=$date6 -replace 'Stempeldatum='
$time=$time -replace 'Zeit='
$time2=$time2 -replace 'Zeit='
$time3=$time3 -replace 'Zeit='
$time4=$time4 -replace 'Zeit='
$time5=$time5 -replace 'Zeit='
$time6=$time6 -replace 'Zeit='
$calc = ([datetime]$time2) - ([datetime] $time)
$calc2 = (([datetime] $time2) - ([datetime] $time)) + (([datetime] $time4) - ([datetime] $time3))
$calc3 = (([datetime] $time2) - ([datetime] $time)) + (([datetime] $time4) - ([datetime] $time3)) + (([datetime] $time6) - ([datetime] $time5))
if ($name -eq $name3 -and $name3 -eq $name5 -and $date -eq $date3 -and $date3 -eq $date5 -and $prename -eq $prename3 -and $prename3 -eq $prename5) {
write-host "Name = $name";"Vorname = $prename";"Stempeldatum = $date";"Zeit = $calc3"
$counter = $counter + 6
}
elseif ($name -eq $name3 -and $date -eq $date3 -and $prename -eq $prename3) {
write-host "Name = $name";"Vorname = $prename";"Stempeldatum = $date";"Zeit = $calc2"
$counter = $counter + 4
}
elseif ($name -eq $name2 -and $prename -eq $prename2 -and $date -eq $date2) {
write-host "Name = $name";"Vorname = $prename";"Stempeldatum = $date";"Zeit = $calc"
$counter = $counter + 2
}
else{
$counter = $counter + 1
}
}
Das csv-File sieht ist so Aufgebaut:
x;x;x;x;Name;Vorname;Datum;Zeit;x;x;x;x;x
x;x;x;x;Walker;John;13.01.;08:00;x;x;x;x;x
x;x;x;x;Walker;John;13.01.;11:00;x;x;x;x;x
x;x;x;x;Walker;John;13.01.;12:00;x;x;x;x;x
x;x;x;x;Walker;John;13.01.;17:00;x;x;x;x;x
x;x;x;x;Walker;John;14.01.;07:00;x;x;x;x;x
x;x;x;x;Walker;John;14.01.;12:00;x;x;x;x;x
x;x;x;x;Walker;John;14.01.;12:30;x;x;x;x;x
x;x;x;x;Walker;John;14.01.;16:00;x;x;x;x;x
x;x;x;x;Walker;John;14.01.;17:00;x;x;x;x;x
x;x;x;x;Walker;John;14.01.;18:00;x;x;x;x;x
x;x;x;x;Zweifel;Hans;13.01.;07:00;x;x;x;x;x
x;x;x;x;Zweifel;Hans;13.01.;11:00;x;x;x;x;x
x;x;x;x;Zweifel;Hans;13.01.;12:00;x;x;x;x;x
x;x;x;x;Zweifel;Hans;13.01.;17:00;x;x;x;x;x
x;x;x;x;Zweifel;Hans;14.01.;07:00;x;x;x;x;x
x;x;x;x;Zweifel;Hans;14.01.;12:00;x;x;x;x;x
x;x;x;x;Zweifel;Hans;14.01.;12:30;x;x;x;x;x
x;x;x;x;Zweifel;Hans;14.01.;16:00;x;x;x;x;x
Das Script liest nun jede Zeile aus, berechnet die tägliche Gesamtarbeitszeit für jede Person und gibt dies dann in der Shell aus:
Name = Walker
Vorname = John
Stempeldatum = 13.01.21
Zeit = 08:00:00
Name = Walker
Vorname = John
Stempeldatum = 14.01.21
Zeit = 10:00:00
Nun möchte ich diese Daten in ein neues csv-File abspeichern, weiss aber nicht wie ich das hinbekomme. Auch wäre es schön es so hinzubekommen, dass es am Schluss wieder so abgespeichert wird:
Name;Vorname;Datum;Zeit
Walker;John;13.01.21;08:00:00
Walker;John;14.01.2021;10:00:00
Bei Fragen oder fehlenden Infos meldet euch gerne und danke schonmal im Voraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 652533
Url: https://administrator.de/forum/daten-aus-powershell-exportieren-652533.html
Ausgedruckt am: 23.04.2025 um 03:04 Uhr
5 Kommentare
Neuester Kommentar

Guckst du hier, da ist das schon eingebaut 
If-Bedingung in Powershell funktioniert nicht wie erhofft
If-Bedingung in Powershell funktioniert nicht wie erhofft
Zitat von @BonasKorn:
Da das ganze für ein Schulprojekt ist, würde ich gerne mein eigenes Script verwenden, auch wenn es unnötig aufwendig ist. Ich muss dem Lehrer schliesslich auch erklären können was ich da gemacht habe.
Trotzdem danke für den Vorschlag!
Da das ganze für ein Schulprojekt ist, würde ich gerne mein eigenes Script verwenden, auch wenn es unnötig aufwendig ist. Ich muss dem Lehrer schliesslich auch erklären können was ich da gemacht habe.
Trotzdem danke für den Vorschlag!
Schonmal bei google nach "export csv powershell" gesucht? Der Link hier scheint mir brauchbar für dich zu sein:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Und ja ich könnte dir den Fertigen Code geben, aber du sollst ja nicht nur dem Lehrer erklären was du gemacht hast, sondern auch was dabei lernen und es verstehen
Gruß
Doskias

Du musst nur aus deinen Daten ein "Objekt" machen dann kannst du es direkt an Export-CSV leiten.
Ab und zu auch mal die Doku lesen hilft ungemein...
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
$daten = [pscustomobject]@{
'Name' = $variable1
'Vorname' = $variable2
# usw.
}
$daten | export-csv .\daten.csv -Delimiter ";" -NoType -Encoding UTF8
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Moin,
Um aller Götter der IT Willen, was treibst Du da???
Das ist vollkommen unnötig und überhaupt nicht objektorientiert. So sieht das aus:
Damit ist diese Unsinn auch nicht mehr notwendig:
Und wieso rechnest Du Dinge aus, die Du evtl. gar nicht brauchst? Die Berechnung gehört in das if-Statement
Den Rest überlasse ich Dir.
Wie man das dann in ein neues CSV schreibt, hat Dir ja schon @147669 verraten. Eine kleine Ergänzung. Ans Ende muss noch -append, damit die Datei nicht bei jedem Datensatz überschrieben wird.
Damit Du das alles verstehst, ein wenig Lektüre aus meiner Linksammlung:
https://www.linetwork.de/powershell-import-export-csv/
https://www.windowspro.de/script/csv-dateien-powershell-erstellen-sortie ...
https://www.msxfaq.de/code/powershell/pscsv.htm
https://adamtheautomator.com/import-csv/
hth
Erik
Zitat von @BonasKorn:
Ich habe ein Script geschrieben, welches Daten aus einem csv- File importiert, diese und diese ändert. Das Script funktioniert soweit einwandfrei und gibt die Daten schön aus. Hier das Script:
Ich habe ein Script geschrieben, welches Daten aus einem csv- File importiert, diese und diese ändert. Das Script funktioniert soweit einwandfrei und gibt die Daten schön aus. Hier das Script:
clear
> $table = Import-Csv -Path 'C:\Temp\Stempelungen\StempelungenJira.csv' -Delimiter ";"
> $counter = 0
> $tablelength = $table.count
>
>
> while ($counter -lt $tablelength) {
>
> $parts = $table[$counter] -split ';'
> $name = $parts[4]
> $prename = $parts[5]
> $date = $parts[6]
> $time = $parts[7]
Um aller Götter der IT Willen, was treibst Du da???
#Hier steht der Name drin
$table[$counter].Name
#Hier der Vorname
$table[$counter].Vorname
#usw.
Damit ist diese Unsinn auch nicht mehr notwendig:
> $name=$name -replace 'Name='
> $name2=$name2 -replace 'Name='
> [...]
>
Und wieso rechnest Du Dinge aus, die Du evtl. gar nicht brauchst? Die Berechnung gehört in das if-Statement
$calc = ([datetime]$time2) - ([datetime] $time)
> $calc2 = (([datetime] $time2) - ([datetime] $time)) + (([datetime] $time4) - ([datetime] $time3))
> $calc3 = (([datetime] $time2) - ([datetime] $time)) + (([datetime] $time4) - ([datetime] $time3)) + (([datetime] $time6) - ([datetime] $time5))
if ($name -eq $name3 -and $name3 -eq $name5 -and $date -eq $date3 -and $date3 -eq $date5 -and $prename -eq $prename3 -and $prename3 -eq $prename5) {
>
> write-host "Name = $name";"Vorname = $prename";"Stempeldatum = $date";"Zeit = $calc3"
>
> $counter = $counter + 6
> }
$table = Import-Csv -Path 'C:\Temp\Stempelungen\StempelungenJira.csv' -Delimiter ";"
$counter = 0
while($counter -lt $$table.count) {
if ($table[$counter].Name -eq $table[$counter + 2].Name -and $table[$counter + 2].Name -eq $table[$counter + 4].Name -and $table.[$counter].Datum - eq $table.[$counter + 2].Datum -and $table.[$counter+2].Datum -eq $table.[$counter +4].Datum) {
$calc = ...
}
Den Rest überlasse ich Dir.
Damit Du das alles verstehst, ein wenig Lektüre aus meiner Linksammlung:
https://www.linetwork.de/powershell-import-export-csv/
https://www.windowspro.de/script/csv-dateien-powershell-erstellen-sortie ...
https://www.msxfaq.de/code/powershell/pscsv.htm
https://adamtheautomator.com/import-csv/
hth
Erik