takvorian
Goto Top

Löschen von Dateien nach Alter

Hallo zusammen,

ich habe ein PowerShell Script welches mir Dateien aus einem freigegebenen Verzeichnis nach Dateiendung und Alter löscht

#
# Beschreibung:
# Dieses Skript löscht Dateien, die eine bestimmte Anzahl von Tagen alt sind. Die Dateierweiterungen, das Alter sowie der Ablageort sind definierbar.
# Der Löschvorgang erstreckt sich auf alle Unterordner
# Alle Operationen werden in einem Logfile im Quellordner gespeichert
#
# Hier können Sie den Quellordner, das Alter der Dateien (in Tagen) und die Dateierweiterungen festlegen
$Source = "\\synology-nas\share\"		# Wichtig: muss mit "\" enden  
$Days = 14					# Anzahl der Tage, nach denen die Dateien gelöscht werden
$ext = "*.pdf"				# Array - erweitern mit  ,".xyz"   
$log = "$Source$(get-date -format yymmddHHmmss).txt"  
$DateBeforeXDays = (Get-Date).AddDays(-$Days)
# Start Script
start-transcript $log
write-host "--------------------------------------------------------------------------------------"  
write-host "Löschen aller Dateien ($ext) im Ordner $Source die älter sind als $Days Tage."  
write-host "--------------------------------------------------------------------------------------"  
get-childitem $Source* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays -and -not $_.psiscontainer} | remove-item -force -verbose
stop-transcript

Soweit so gut. Nach ersten Tests und dem Logfile
**********************
nStart der Windows PowerShell-Aufzeichnung
Startzeit: 20250310030002
Benutzername: xxx
RunAs-Benutzer: xxx
Konfigurationsname: 
Computer: xxx(Microsoft Windows NT 10.0.20348.0)
Hostanwendung: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command C:\xxx\xxx.ps1
Prozess-ID: 2444
PSVersion: 5.1.20348.2582
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.20348.2582
BuildVersion: 10.0.20348.2582
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
Die Aufzeichnung wurde gestartet. Die Ausgabedatei ist "\\synology-nas\share\250010030002.txt".  
--------------------------------------------------------------------------------------
Löschen aller Dateien (*.pdf *.txt) im Ordner \\synology-nas\share\ die älter sind als 14 Tage.
--------------------------------------------------------------------------------------
get-childitem : Unerwarteter Netzwerkfehler.

In C:\Bereinigung_xxx\xxx.ps1:19 Zeichen:1
+ get-childitem $Source* -include $ext -recurse | where {$_.lastwriteti ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ReadError: (\\synology-nas\share\#recycle:String) [Get-ChildItem], IOException
    + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand
get-childitem : Unerwarteter Netzwerkfehler.

In C:\Bereinigung_xxx\xx.ps1:19 Zeichen:1
+ get-childitem $Source* -include $ext -recurse | where {$_.lastwriteti ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ReadError: (\\synology-nas\share\#recycle:String) [Get-ChildItem
   ], IOException
    + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand

**********************
Ende der Windows PowerShell-Aufzeichnung
Endzeit: 20250310030037
**********************
Sieht für mich aus, als würde das Script die Dateien in den Papierkorb schieben wollen.
Kann mir hier jemand helfen, damit ich die Daten hart gelöscht bekomme?

Vielen Dank,
Gruß Tak

Content-ID: 671850

Url: https://administrator.de/forum/loeschen-von-dateien-nach-alter-671850.html

Ausgedruckt am: 10.03.2025 um 17:03 Uhr

takvorian
takvorian 10.03.2025 um 15:18:30 Uhr
Goto Top
Lösungsansatz:

get-childitem $Source* -include $ext

ist evtl. der * hinter $Source falsch?

Tak
kpunkt
kpunkt 10.03.2025 aktualisiert um 15:39:46 Uhr
Goto Top
Ich sage ja. Den Asterisk hast du ja schon über $ext. Mach da nur ein PDF draus und filtere mit dem Asterisk, dann sieht das ungefähr so aus.

Get-ChildItem -Path $Source -Filter "*.$ext" -File -Recurse | where ...  

PS: -Filter ist schneller als -Include. Ersteres filtert schon beim Ausführen, letzteres filtert erst nach dem Abruf der Elemente aus.
DerMaddin
DerMaddin 10.03.2025 um 15:37:26 Uhr
Goto Top
Moin,

wozu ein PS-Skript? Es gibt doch DelAge32|64