forseti2003
Goto Top

Powershell-Skript löschen alter Dateien

Hallo in die Runde,

hab mal zu diesem Skript eine Frage:

$Verzeichnis = "\\serverip\Archiv_DBD"  
$Tage= "-28"  
$Logfile = "M:\Logfile.txt"  

"  
Prüfung auf veraltete Dateien im Verzeichnis: $Verzeichnis / Älter als: $Tage" >> $Logfile  
"Diese Dateien stehen zur Löschung an:" >> $Logfile  
"Beginn der Bereinigung "+(get-date)+"" >> $Logfile  
Get-ChildItem -Path "$Verzeichnis" -recurse | Where {$_.CreationTime -lt (get-date).adddays($Tage)}  | ft Name, CreationTime, @{Name="Size in GB";Expression={ "{0:N3}" -f ($_.Length / 1GB)}}, Directory >> $Logfile  
Get-ChildItem -Path "$Verzeichnis" -recurse | Where {$_.CreationTime -lt (get-date).adddays($Tage)}  | Remove-Item -force -verbose -include .7z >> $Logfile  
"Ende der Bereinigung "+(get-date)+"" >> $Logfile  

Das Skript läuft ohne Fehlermeldung durch, das Log wird sauber erzeugt, auf den ersten Blick passt eigentlich alles. Nur ein Fehler hat das ganze, er löscht keine einzige Datei.
Falsche Pfade oder so kann ich ausschließen, da im Log die richtigen Dateien und der Pfad ausgewiesen wird. Das Skript hat ursprünglich mal funktioniert, nun wollte ich es
einfach bei einem anderen Server übernehmen und da "verweigert" er. Kann es an dem Verzeichnis liegen? Kann PowerShell eine Datei in einem Netzwerkpfad nicht löschen?

Im voraus besten Dank für eure Ideen.

Content-ID: 377593

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

Ausgedruckt am: 05.11.2024 um 20:11 Uhr

H41mSh1C0R
H41mSh1C0R 20.06.2018 um 14:24:26 Uhr
Goto Top
Hi,

schreibt er denn überhaupt etwas ins Log?
Wenn nicht, liefert dir die Pipe irgendetwas vor dem Remove-Item?

VG
colinardo
Lösung colinardo 20.06.2018 aktualisiert um 15:01:55 Uhr
Goto Top
Servus.
Wundert mich ehrlich gesagt nicht daß er nichts löscht face-smile.
-include .7z
Da fehlt das berühmte Wildcard-Sternchen(*) oder willst du nur Dateien löschen die exakt .7z lauten?

Btw. Die Dateien doppelt zu enumerieren ist schon ziemlich ineffizient, ganz zu schweigen das dann von den Dateien die im Log landen tatsächlich nur die 7z gelöscht werden sollen. Für den der das Logfile liest stiftet das nur Verwirrung.

$Verzeichnis = '\\serverip\Archiv_DBD'  
$Tage = 28
$Logfile = 'M:\Logfile.txt'  

Start-Transcript $logfile
"Prüfung auf veraltete Dateien im Verzeichnis: $Verzeichnis / Älter als: $Tage  
Diese Dateien stehen zur Löschung an:"  
$files = Get-ChildItem -Path $Verzeichnis -recurse -Include *.7z | ?{$_.CreationTime -lt (get-date).adddays(-$Tage)}  

$files | ft Name, CreationTime, @{Name="Size in GB";Expression={ "{0:N3}" -f ($_.Length / 1GB)}}, Directory -Autosize -Wrap  

"Beginn der Bereinigung $(get-date -f G)"  

$files | Remove-Item -force -verbose
"Ende der Bereinigung $(get-date -f G)"  
Stop-Transcript
Kann PowerShell eine Datei in einem Netzwerkpfad nicht löschen?
face-big-smile Ein Auto das man schieben muss?? Soweit ist es dann doch noch nicht. Solange du darfst, darfst du auch löschen, aber wenn du deinen Filter nicht richtig baust löscht er auch nichts.

Grüße Uwe
Forseti2003
Forseti2003 20.06.2018 um 15:44:58 Uhr
Goto Top
Danke Uwe, manchmal sind es die Kleinigkeiten die man übersieht. Mit Wildcard klappt es wunderbar.
Ja, dass das Skript ein wenig Umbaubedürftig war ist mir auch aufgefallen, ist halt schon ein sehr altes Teil und war eines meiner ersten Gehversuche mit PowerShell face-wink Das Log allerdings sah immer sauber aus, vermutlich weil im Verzeichnis auch nur noch 7z-Dateien liegen und nichts anderes.