uridium69
Goto Top

Dateien älter als 48 Stunden automatisch löschen

Moin

Bei uns im Betrieb haben wir einen sog. "Scanfolder" sprich dort können Mitarbeiter von unseren Multifunktionsgeräten
Dokumente scannen lassen. Sehr oft werden die Dateien danach nicht gelöscht. Nun möchte ich dies automatisieren soweit möglich, d.h. alle Dateien die sich im Scanfolder (so heisst er auch) befinden, und älter als 48h werden automatisch gelöscht, dies könnte ein Task sein, der jede nach um eine gewisse Zeit läuft.
Das Problem ist aber wie Umsetzen ?

Hat da jemand eine "Pfannenfertige" Lösung ?

Content-Key: 4674784886

Url: https://administrator.de/contentid/4674784886

Printed on: April 27, 2024 at 10:04 o'clock

Mitglied: 4400667902
Solution 4400667902 Nov 18, 2022 updated at 12:03:12 (UTC)
Goto Top
Freitag da benutzt wohl keiner mehr die Suchfunktion face-sad ... Das findest du hier millionenfach ....
ls 'D:\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force -verbose  
oder forfiles
forfiles /P D:\Scordner /D -2 /c "cmd /c del @path"  
usw. ...
Member: Crusher79
Solution Crusher79 Nov 18, 2022 at 11:53:35 (UTC)
Goto Top
Eben...

Mit -48 wäre es nur schöner irgendwie.

ls 'D:\Scanfolder' -File | ?{$_.LastWriteTime -lt (get-date).AddHours(-48)} | del -Force -verbose  
Mitglied: 4400667902
4400667902 Nov 18, 2022 updated at 11:57:04 (UTC)
Goto Top
Zitat von @Crusher79:
Mit -48 wäre es nur schöner irgendwie.
Uuuups natürlich da hat die Hand schneller getippt als das Hirn nachgekommen ist face-smile 🙈.
Member: uridium69
uridium69 Nov 18, 2022 updated at 13:31:41 (UTC)
Goto Top
Danke schon mal für die Hilfe, ich habe es mal probehalber auf meinem PC geprüft und einige heutige Files und ältere reinkopiert, Befehlt ausgeführt und bis auf die heutigen waren alle anderen weg. Wenn ich nun einen UNC Pfad hinzufügen will anstatt ein lokales Laufwerk zb. \\FileserverTemp\Scanfolder, verhält es sich gleich ?
Mitglied: 4400667902
4400667902 Nov 18, 2022 updated at 13:34:58 (UTC)
Goto Top
Zitat von @uridium69:
Wenn ich nun einen UNC Pfad hinzufügen will anstatt ein lokales Laufwerk zb. \\FileserverTemp\Scanfolder, verhält es sich gleich ?
Macht keinen Unterschied, hätte man ja eigentlich auch selbst herausfinden können, kopfkratz ... 🐟 .
Member: uridium69
uridium69 Nov 21, 2022 at 13:59:24 (UTC)
Goto Top
Die ' kommen auch vor den UNC Pfad nehm ich mal an ? Bsp. '\\Servername\Verziechnis1\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force -verbose ?
Mitglied: 3063370895
3063370895 Nov 21, 2022 updated at 14:03:34 (UTC)
Goto Top
die ' brauchst du, wenn der Pfad Leerzeichen enthält. Schaden aber in keinem Fall.
Get-ChildItem '\\Servername\Verziechnis1\Scanfolder' -File | Where-Object LastWriteTime -lt (Get-Date).AddHours(-48) | Remove-Item -Force -Verbose  

In Skripten empfiehlt es sich für die Leserlichkeit die Aliase (ls, ?, del) durch die richtigen Commandlets zu ersetzen (Get-ChildItem, Where-Object, Remove-Item)
Member: uridium69
uridium69 Dec 06, 2022 at 08:12:10 (UTC)
Goto Top
Update:

Das Löschen des Scanfolders, klappt einwandfrei mit folgendem Befehl, auch als Scheduled Task:

ls 'c:\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force –verbose

Wenn ich aber den PC-Name (zum Testen mein eigener PC) eingebe, funktioniert die Sache nicht, den Ordner Scanfolder habe ich natürlich vorher freigegeben (Everyone).

ls 'ws-pc-72\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force -verbose

Was mache ich falsch? Weil am Ende wird der Task auf den richtigen Scanfolder auf unserem Fileserver ausgeführt, mein PC dient nur als "Spielwiese"
Mitglied: 3063370895
3063370895 Dec 06, 2022 at 08:46:26 (UTC)
Goto Top
Fehlen da die \\ am Anfang?

ls '\\ws-pc-72\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force -verbose  
Member: uridium69
uridium69 Dec 06, 2022 at 09:31:03 (UTC)
Goto Top
@chaot1coz: Bingo, wie kann ich so doof sein, ohne \\ geht nichts, Logo. Danke Dir (rotwerd)
Member: uridium69
uridium69 Dec 06, 2022 at 09:50:30 (UTC)
Goto Top
Noch eine Frage, wenn ich Unterordner auch Berücksichtigen will , wie wäre der Befehlt dazu?

Gehen wir davon aus, das es von Benutzer erstellten Unterordner gibt, und diese auch gelöscht haben möchte mitsamt Inhalt, ich frage dies, da wir einen anderen Ordner haben "Temp" wo für alle zugänglich sind, und als Datenaustausch gedacht sind, aber dort bleiben oft Dateien und auch Unterordner mitsamt Dateien ewig liegen.
Mitglied: 3063370895
3063370895 Dec 06, 2022 updated at 09:56:59 (UTC)
Goto Top
Zitat von @uridium69:

Noch eine Frage, wenn ich Unterordner auch Berücksichtigen will , wie wäre der Befehlt dazu?

Gehen wir davon aus, das es von Benutzer erstellten Unterordner gibt, und diese auch gelöscht haben möchte mitsamt Inhalt, ich frage dies, da wir einen anderen Ordner haben "Temp" wo für alle zugänglich sind, und als Datenaustausch gedacht sind, aber dort bleiben oft Dateien und auch Unterordner mitsamt Dateien ewig liegen.

Get-ChildItem '\\ws-pc-72\Scanfolder' -File -Recurse | Where-Object LastWriteTime -lt (Get-Date).AddHours(-48) | Remove-Item -Force -Verbose  

Das "-Recurse" schließt alle Unterordner und Dateien mit ein.

Edit:
Das "-File" bei Get-ChildItem bewirkt, dass nur Dateien aufgelistet werden. Sollen auch Unterordner selbst gelöscht werden, musst du das "-File" weglassen.

(ich habe die Aliase (Abkürzungen) nochmal durch die kompletten CmdLets ersetzt, ls = Get-ChildItem, ? = Where-Object und del = Remove-Item)