PowerShell Skript beim Löschen 'ja, alle' automatisieren

ArrorRT

Lieutenant
Registriert
Jan. 2021
Beiträge
847
Hallo,

ich habe ein kleines PowerShell Skript das Backup Darten löschen soll, die älter als 30 Stunden sind, das klappt prinzipiell auch nur kommt wird die Meldung:

1664137534692.png



Da ich das Script jeden Tag um 3 Uhr ausführen lasse, sollte das natürlich automatisch bestätigt werden.

Weiß jemand was ich einfügen muss damit es klappt

-Confirm hat übriges nicht funktioniert
 
Steht doch da. Dein Remove-Item brauch -Recurse.
 
  • Gefällt mir
Reaktionen: Maviapril2 und PHuV
@t-6 -Confirm (der soll endlich die Daten löschen 😂)
Spaß bei Seite, was für ein Argument muss ich denn dort hinschreiben?

@Yuuri und was muss ich jetzt machen?
 
Der Fehler ist, dass du mit Get-ChildItem und -Recursive zwar alle Dateien und die Dateien aller Unterordner auswählst, allerdings zählen da Ordner selbst auch dazu. Und sobald ein Ordner in der Iteration dran kommt für Remove-Item, bekommst du die Meldung, weil das Löschen des Ordners auch das Löschen der Dateien innerhalb nach sich ziehen würde. Also ich würde die Ordner irgendwie ausschließen.
 
Warum machst Du das nicht?
Yuuri schrieb:
Steht doch da. Dein Remove-Item brauch -Recurse.
Und der Link wurde Dir doch auch gepostet,
Elbrathil schrieb:
Hi, Pro-Tipp für PowerShell: schau in die docs/reference, wenn du ein Problem mit einem cmdlet hast.
Hier: https://learn.microsoft.com/en-us/p...ll.management/remove-item?view=powershell-7.2
Du mußt nur lesen:
The Recurse parameter deletes all of the contents of the "OldApp" key recursively. If the key contains subkeys and you omit the Recurse parameter, you are prompted to confirm that you want to delete the contents of the key.
 
  • Gefällt mir
Reaktionen: Maviapril2
Ah ok mit -Recurse hats geklappt

also zusammengefasst

Get-ChildItem "W:\NCBackup\" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddHours(-30))}| Remove-Item -Recurse
 
  • Gefällt mir
Reaktionen: PHuV
Die Lösung mit -Recursive bei Remove-Item ist je nach Ordnerstruktur aber komplett falsch und löscht gegebenenfalls Files, die du nicht gelöscht haben möchtest.
 
@eweu ich hatte jetzt leider nur einen Ordner zum Testen, aber inwiefern könnte es denn schiefgehen?
 
PowerShell:
Measure-Command {
 Get-ChildItem -Recurse "W:\NCBackup" -Directory | Where-Object {$_.LastWriteTime -Lt (Get-Date).AddHours(-30).Date} | Remove-Item -Recurse -Force
}
 
  • Gefällt mir
Reaktionen: ArrorRT
ArrorRT schrieb:
inwiefern könnte es denn schiefgehen
Indem du einen Ordner löscht, der einen Timestamp älter als 30 Stunden hat, der allerdings selbst Unterordner und Dateien darin beinhaltet, die einen Timestamp weniger alt als 30 Stunden haben.

edit: Der Vorschlag im Post oberhalb ist genauso fehlerhaft für diesen edge case
 
Zuletzt bearbeitet:
@t-6 -Confirm (der soll endlich die Daten löschen 😂)
Spaß bei Seite, was für ein Argument muss ich denn dort hinschreiben?
da steht dann auch, warum -confirm nichts, bringt - weil es das gegenteil macht von dem, was du möchtest. Du brauchst vielleicht eher force, wenn ich dein Problem verstanden habe.
-force ignoriert "nur" Schreibschutz. Kann man aber sicherheitshalber auch mit aufnehmen.

Was TE möchte, ist:

Code:
-confirm:$false
 
eweu schrieb:
edit: Der Vorschlag im Post oberhalb ist genauso fehlerhaft für diesen edge case
Lies dir den Eingangsbeitrag und den Beitrag #8 dieses Themenfadens nochmal genau durch und dann kommst du darauf, was der TE möchte.
 
Ich verstehe nicht wirklich, wo hier das Missverständnis liegt, der TE hat halt keine Auskunft über die genaue Ordnerstruktur gegeben. Deine Lösung würde Ordner auswählen, mit einem Timestamp älter als 30 Stunden und diesen löschen, unabhängig davon, welchen Timestamp potenzielle Files in Unterordnern dieses Ordners haben, die eben neuer sein können als der Timestamp des Überordners. Somit werden in diesem Fall Files gelöscht, die weniger alt als 30 Stunden sind und der TE sagt er will nur Files löschen, die älter als 30 Stunden sind. Das ist doch ein offensichtliches Problem, oder etwa nicht? Oder was übersehe ich deiner Meinung nach?
 
Zuletzt bearbeitet:
Mal ne naive Frage von mir: Was passiert mit Sym links die auf andere Ordner verweisen, die "Eigentlich" nicht Teil dieser Ordnerstruktur sind, wenn man diese ganzen Schutzmaßnahmen bewusst abschaltet?
 
  • Gefällt mir
Reaktionen: eweu
Zurück
Oben