Benutzer mit den meisten Antworten
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
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?
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 25. Oktober 2017 21:37
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?
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 25. Oktober 2017 21:37
-
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
-
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.
-
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''