Kennt sich jemand mit Powershell Scripte aus?
Moin Moin,
Ich möchte gerne ein Script in Powershell erstellen, welches alle Ordner und Unterordner durchsucht und automatisch alle .xml, .txt sowie .zip dateien die älter als 90 Tage alt sind löscht.
ich bin leider noch nicht weitergekommen und weiß nicht wo der Fehler liegt wenn ich;
forfiles /P C:\ /S /M -include .txt, .zip, .xml /D -90 /C "cmd /c del /q @path"
eingebe. mag mir vielleicht jemand helfen was ich eintragen muss?
2 Antworten
welches betriebssystem?
auf nem windows server hast du den „FSRM“. der kann solche tasks von haus aus automatisieren ;-)
also wenns ein windows server ist:
https://docs.microsoft.com/en-us/windows-server/storage/fsrm/create-file-expiration-task
So könnte es klappen:
Get-ChildItem -Path C:\* -Include *.xml, *.txt, *.zip -Recurse -File | where LastWriteTime -le (Get-Date).AddDays(-90) | Remove-Item -Force -whatif
Als Sicherheit habe ich dir den "-whatif" tag bei "Remove-Item" hinzugefügt. So wird noch nichts gelöscht. Wenn die Tests erfolgreich sind, kannst du diesen entfernen und dann wird alles gelöscht :)
Habe es mal ausprobiert, er sagt mir allerdings das bei .zip ein Fehler liegt
forfiles : ERROR: Invalid argument/option - '*.zip*'.
At line:1 char:1
+ forfiles /P C:\root\ /S /M -include *.zip* *.xml* /D -90 /C "cmd /c del /q @path ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (ERROR: Invalid ...ion - '*.zip*'.:String) [], Remote
Exception
+ FullyQualifiedErrorId : NativeCommandError
Type "FORFILES /?" for usage.
Hast du meinen Command ausgeführt? Dieser arbeitet mit Get-ChildItem und nicht mit Forfiles...
also er führt es aus, allerdings löscht er nicht die Dateien die in C:\root\crlog\ liegen bzw. er löscht gar keine dateien in C:\
Lese bitte die Antworten genauer ;) Wie beschrieben habe ich noch den "-whatif" tag hinzugefügt damit wird nichts gelöscht sondern dir wird angezeigt, was gelöscht würde. Dies dient zu testzwecken, da das C:\ Laufwerk heikel sein kann. Lösch diesen Tag und dann wird er auch die Files löschen.
selbst wenn ich -whatif entferne und zusätzlich noch den genauen Ordnerpfad angebe, löscht er leider rein gar nichts, es kommt zwar keine Fehlermeldung, sodass er zwar etwas ausführt, jedoch weiß ich nicht was er denn tut, wenn er überhaupt etwas tut :/
Hast du denn überhaupt Berechtigungen dort Files zu löschen? Evtl das Powershell Script als Admin ausführen?
Hmm, ich habe es bei mir getestet und da hat es funktioniert. Versuche mal einen Ordner C:\Test anzulegen und es da zu testen...
Tut sich leider gar nichts bei mir, C:\Test geht nicht weder C:\Test\crlog noch C:\Test\crlog\Datei.txt
mit meiner in meiner obigen Frage oben beschriebenem cmd ohne das ich .txt .xml etc. eingefügt habe, hat es funktioniert, dass er in dem ordner alle dateien gelöscht hat, die älter als 90 Tage alt waren, dass ist nur leider nicht sinn und zweck :/
ist ein SFTP-Server der unter Windows läuft, ich kann jetzt aber nicht genau sagen welche Windows version das ist. kann aber sein das er über 2012 R2 läuft