spyware96 Geschrieben 19. August 2016 Geschrieben 19. August 2016 Hallo, Ich habe folgendes Problem: Eine mit Hyper-V Virtualisierte Maschine wird per Export in einen Ordner gesichert, der Ordner in dem sich der Export befindet wird jeden tag mit dem Datum im namen angelegt. Format: yy-MM-dd Nun soll das powershell-script welches den Export ausführt gleichzeitig die Sicherungen der letzten 7 tage löschen. Folgendes Script funktioniert zwar, löscht aber daten aus den Sicherungen da diese ein älteres Datum haben weil die ja teilweise nur Kopiert werden. $DatumVor7Tagen=(Get-Date).AddDays(-7) $Source="c:\Backup\" start-transcript "$Source $(get-date -format yy-MM-dd).txt" get-childitem "$Source" -recurse | where {$_.lastwritetime -lt $DatumVor7Tagen} | remove-item -recurse -whatif Gibt es eine Möglichkeit nach dem Änderungsdatum des Ordners und nicht der Dateien zu Filtern? Oder doch komplett anders Aufbauen? Zitieren
Tiro Geschrieben 19. August 2016 Geschrieben 19. August 2016 where-object {$_.lastwritetime -lt $DatumVor7Tagen -and $_.psiscontainer} sollte das Problem lösen (ungetestet ;-) ) Zitieren
Gast Uhu Geschrieben 19. August 2016 Geschrieben 19. August 2016 (bearbeitet) Das Problem bei deinem Skript ist, dass du über die gesamte Ordnerstruktur iterierst und dort einfach alle Dateien weg haust, die älter als 7 Tage sind. Das Code-Snippet von Tiro wird dir so auch nur bedingt helfen. Das löscht dann zwar nicht mehr direkt die Dateien in deinen jüngeren Sicherungen, aber immer noch die älteren Ordner in deiner Sicherung und damit letztendlich wieder die Dateien wenn du rekursiv alles weg haust. Was du brauchst ist ein bisschen mehr Logik in deinem Code. Du solltest im ersten Schritt erstmal durch deinen Hauptordner iterieren, wo alle Sicherungen abgelegt sind. Dort separierst du dann in einer Liste die Ordner der Sicherungen (psiscontainer) die älter als 7 Tage sind. Wenn du die hast, kannst du einfach die Ordner samt Childitems rekursirv löschen. Die Dateien in den Ordnern interessieren dich gar nicht deshalb musst du dir von denen das Datum auch nicht anschauen. Eleganter wäre allerdings, wenn dein Skript/Dienst, welches den Export erstellt, dein Export in einen .zip Container packt. Dann braucht das Skript nur noch den .zip Container löschen und gar nicht über das Filesystem rekursiv iterieren um die Dateien in den Sicherungsordnern zu löschen. Spart zeitgleich auch Plattenplatz. Wenn man dann noch den letzten % rauskitzeln wil (ist aber Geschmackssache), dann könnte man statt sich auf das Änderungsdatum zu beziehen (ist und unschön und System abhängig) sich eher zur Nutze machen, dass deine Dateien nach dem yy-MM-dd Schema benannt sind. Den Teil könnte man sich mit einem regulären Ausdruck aus dem Namen Filtern und dass dann mit dem aktuellen Datum vergleichen. Dann wäre das Verfahren ganz sauber. Bearbeitet 19. August 2016 von Uhu Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.