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-Key: 377593

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

Printed on: April 16, 2024 at 19:04 o'clock

Member: H41mSh1C0R
H41mSh1C0R Jun 20, 2018 at 12:24:26 (UTC)
Goto Top
Hi,

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

VG
Member: colinardo
Solution colinardo Jun 20, 2018 updated at 13:01:55 (UTC)
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
Member: Forseti2003
Forseti2003 Jun 20, 2018 at 13:44:58 (UTC)
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.