none
Powershell bestimmte Zeile aus CSV Datei löschen RRS feed

  • Frage

  • Hallo zusammen,

    ich stehe vor folgendem Problem.Nach dem Import einer CSV Datei möchte ich bestimmte Zeilen löschen und die Datei dann speichern und schließen.

    Es geht im Prinzip darum, an einem Stichtag aktionen auszuführen und die Parameter danach aus der Zeile zu löschen.

    Ein Auszug aus meinem Skript:

    $Benutzer = Import-Csv $Skriptpfad\Benutzer.csv -Delimiter ';' ForEach ($User in $Benutzer) { $Benutzername = $User.Benutzer $Datum = $User.Datum $aktualdate = Get-Date -Format d.M.yyyy if ($Datum -lt $aktualdate) { #Hier folgen die Aktionen

    Und nun soll die SCV Datei ohne die soeben ausgeführte Zeile gespeichert werden.

    Könnt ihr mir hier helfen?

    Viele Grüße

    Tim

    Mittwoch, 25. Januar 2017 09:07

Antworten

  • Also ungefähr so:
    $Users = Import-Csv $Skriptpfad\Benutzer.csv -Delimiter ';'
    ForEach ($User in $Users){
        if ((Get-Date $User.Datum)  -lt (Get-Date)){
            #Hier folgen die Aktionen
        }
        Else{
            Write-Output $User
        }
    } | Export-CSV $Skriptpfad\Benutzer.csv -Delimiter ';' -NoTypeInformation


    Grüße - Best regards

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



    • Bearbeitet BOfH-666 Mittwoch, 25. Januar 2017 10:40
    • Als Antwort markiert Timson_Hamburg Mittwoch, 25. Januar 2017 11:55
    Mittwoch, 25. Januar 2017 10:39

Alle Antworten

  • Dreh doch die "Logik" einfach um. Statt if( tralala ) { tu etwas}  nimmst Du if(-not ( tralala )) { tu tu etwas }.  Und als "tu etwas" gibst Du einfach das aktuelle Object aus und pipe-st das ganze hinten wieder in die CSV-Datei.


    Grüße - Best regards

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


    • Bearbeitet BOfH-666 Mittwoch, 25. Januar 2017 09:37
    Mittwoch, 25. Januar 2017 09:36
  • Entweder habe ich mich wieder einmal nicht gut genug ausgedrückt oder ich stehe auf dem Schlauch.

    Das Skript soll ja alle bis zu dem aktuellen Datum aufgeführten Benutzer entsprechend manipulieren.

    Im Anschluß soll die CSV Datei ohne diese Zeilen gespeichert werden.

    Viele Grüße

    Tim

    Mittwoch, 25. Januar 2017 09:43
  • Na dann hängst Du eben einfach einen else - Zweig dran und gibst für die Pipe die unveränderten Objekte "hinten raus".

    Grüße - Best regards

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

    Mittwoch, 25. Januar 2017 10:30
  • Also ungefähr so:
    $Users = Import-Csv $Skriptpfad\Benutzer.csv -Delimiter ';'
    ForEach ($User in $Users){
        if ((Get-Date $User.Datum)  -lt (Get-Date)){
            #Hier folgen die Aktionen
        }
        Else{
            Write-Output $User
        }
    } | Export-CSV $Skriptpfad\Benutzer.csv -Delimiter ';' -NoTypeInformation


    Grüße - Best regards

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



    • Bearbeitet BOfH-666 Mittwoch, 25. Januar 2017 10:40
    • Als Antwort markiert Timson_Hamburg Mittwoch, 25. Januar 2017 11:55
    Mittwoch, 25. Januar 2017 10:39
  • Hi,

    hatte das gerade so ähnlich dann auch umgesetzt.

    Vielen Dank für die schnelle Hilfe

    Tim

    Mittwoch, 25. Januar 2017 11:55