none
Daten löschen und verschieben

    Frage

  • Hallo Zusammen evtl kann mir jemand hiermit helfen.

    Ich habe in einem Netzlaufwerk verschiedene Ordner/Unterordner mit Dateien die gelöscht  und verschoben werden müssen.

    $FilesToCheck = Get-ChildItem -Path "\\IP-Adresse\Speicherziele\Kunde1\_ALT\*",
    "\\IP-Adresse\Speicherziele\Kunde2\_ALT\*",
    "\\IP-Adresse\Speicherziele\Kunde3\_ALT\*",
    "\\IP-Adresse\Speicherziele\Kunde4\_ALT\*",
    "\\IP-Adresse\Speicherziele\Kunde5\_ALT\*",
    "\\IP-Adresse\Speicherziele\Kunde6\_ALT\*",
    "\\IP-Adresse\Speicherziele\Kunde7\_ALT\*",
    
    Remove-Item $FilesToCheck
    
    gci -Path "\\IP-Adresse\Speicherziele" -Directory | %{
        $old = $_.Fullname + "\_ALT"
        gci $_.Fullname -Recurse | ?{$_.Directory.Name -ne "_ALT" -and $_.LastWriteTime -lt (get-date).AddDays(-1)} | move-item -Destination $old -Force
    }

    Dieses Skript funktioniert wunderbar. Er löscht alle Dateien die im _ALT Ordner liegen und danach verschiebt er alle  Dateien die im übergeordneten Ordner liegen in _ALT die älter als 1 Tag sind.

    Ich hab nun den Fall das bei Kunde3 noch ein Ordner hat also:

    "\\IP-Adresse\Speicherziele\Kunde3\fertig\_ALT\*",

    Wie bekomme ich das hin das er bei Kunde3 die Dateien die in fertig liegen in _ALT verschiebt und zuvor den _ALT Ordner entleert.

    Zudem zeigt mir das Skript oben jedes mal einen Fehler an, das bei manchen Ordnern keine Dateien finden kann, da der Ordner leer ist.

    Kann mir evtl jemand hiermit weiterhelfen?

    Würde mich für jede Art Hilfestellungen freuen.

    LG Michi

    Freitag, 20. Oktober 2017 08:32

Antworten

  • Wie bekomme ich das hin das er bei Kunde3 die Dateien die in fertig liegen in _ALT verschiebt und zuvor den _ALT Ordner entleert.

    Indem Du auch hier die Methode im zweiten Block verwendest - also mit gci -recurse und $_.Directory.Name -ne "_ALT" bzw. dann halt auch $_.Directory.Name -eq "_ALT"

    Ich würde da

    1. Einmal alle Dateien einlesen in eine Variable.
    2. Foreach, und dann alle mit _ALT im Pfad löschen.
    3. Foreach, und dann alle verschieben. Und zwar einfach in das Unterverzeichnis _ALT ihres aktuellen Ordners.

    Zudem zeigt mir das Skript oben jedes mal einen Fehler an, das bei manchen Ordnern keine Dateien finden kann, da der Ordner leer ist.

    -ErrorAction SilentlyContinue?

    Freitag, 20. Oktober 2017 11:52

Alle Antworten

  • Wie bekomme ich das hin das er bei Kunde3 die Dateien die in fertig liegen in _ALT verschiebt und zuvor den _ALT Ordner entleert.

    Indem Du auch hier die Methode im zweiten Block verwendest - also mit gci -recurse und $_.Directory.Name -ne "_ALT" bzw. dann halt auch $_.Directory.Name -eq "_ALT"

    Ich würde da

    1. Einmal alle Dateien einlesen in eine Variable.
    2. Foreach, und dann alle mit _ALT im Pfad löschen.
    3. Foreach, und dann alle verschieben. Und zwar einfach in das Unterverzeichnis _ALT ihres aktuellen Ordners.

    Zudem zeigt mir das Skript oben jedes mal einen Fehler an, das bei manchen Ordnern keine Dateien finden kann, da der Ordner leer ist.

    -ErrorAction SilentlyContinue?

    Freitag, 20. Oktober 2017 11:52
  • Hey Vielen Dank für deine ausführliche Erklärung, leider schaffe ich das nicht und lass es sein.

    Powershell ist nichts für mich leider :(

    LG Michi

    Donnerstag, 26. Oktober 2017 09:49
  • schau dir auch noch Robocop an. 

    wenn es jedoch nur ein Kunde ist der aus dem Schema fällt würde ich es an deiner Stelle bei diesem Kunden manuell korrigieren.


    Chris

    Donnerstag, 26. Oktober 2017 12:06
  • Hey wisst ihr evtl wie ich -ErrorAction SilentlyContinue in diesem Code einbinden kann?

    gci -Path "\\IP\Speicherziele" -Directory | %{    $old = $_.Fullname + "\_ALT"    gci $_.Fullname -Recurse | ?{$_.Directory.Name -ne "_ALT" -and $_.LastWriteTime -lt (get-date).AddDays(-1)} | move-item -Destination $old -Force}

    Möchte kein Fehler verursachen.


    • Bearbeitet michi-ffm Freitag, 10. November 2017 09:01
    Freitag, 10. November 2017 08:36
  • Soweit mir bekannt kannst du -ErrorAction SilentlyContinue nach jedem CMDlet eingeben bzw. musst du, sofern du keine Fehlerausgabe möchtest. Also bei deinem Beispiel zum einen nach gci und beim anderen nach Move-Item. Das müsste es eigentlich dann sein. 
    Freitag, 10. November 2017 08:53
  • Hey hat geklappt Vielen Dank,

    Jedoch frage ich mich, ob er nur die Fehlermeldungen einfach löscht/ignoriert oder ob er weiter sucht....

    Da manche Ordner leer sind sollte er einfach weiter springen hmm

    Freitag, 10. November 2017 09:03
  • Möchte kein Fehler verursachen.

    … dann solltest Du keine machen!  ;-) :-D

    Entweder, wie Fahiko schon geschrieben hatte, hinter jeden cmdlet ein -ErrorAction SilentlyContinue, oder am Anfang des Scripts einmal die $ErrorActionPreference auf SilentlyContinue setzen. Oder, und das ist meiner Meinung nach der professionellste Weg, Du arbeitest mit Try/Catch und erkennst und behandelst auftretende Fehler in Deinem Script.


    Best regards (79,108,97,102|%{[char]$_})-join''

    Freitag, 10. November 2017 09:07
  • Okay vielen lieben Dank ich schau mal was ich machen kann ^^
    Freitag, 10. November 2017 09:19
  • > Du arbeitest mit Try/Catch und erkennst und behandelst auftretende Fehler in Deinem Script.

    ACK :-) Ich würde auch den Oneliner auflösen und das "verständlich und strukturiert" machen, damit es nachvollziehbarer wird.

    Freitag, 10. November 2017 09:49