crashzero
Goto Top

Verzeichnis mit Inhalt größer 30 Tage löschen via PowerShell

Moin,

merkwürdigerweise kann ich bestimmte Verzeichnisse nicht löschen mit diesem Script :

################### Verzeichnisse > 30 Tage löschen #########################
$Now = Get-Date
$Days = "31" # Alter der zu löschenden Verzeichnisse  
$TargetFolder = "i:\Name_Server\Verzeichnis\1verzeichnis\2verzeichnis" # Verzeichnispfad  
$LastWrite = $Now.AddDays(-$Days)
$Folders = get-childitem -path $TargetFolder | 
Where {$_.psIsContainer -eq $true} | 
Where {$_.LastWriteTime -le "$LastWrite"}   
    foreach ($Folder in $Folders)
    {
    write-host "Lösche $Folder" -foregroundcolor "Red"  
       $pfad=$TargetFolder + "\" + $Folder  
       $pfad
       Remove-Item $pfad -Recurse -Force -Confirm:$false
    }

Die "Write-Host" Ausgabe liefert den richtigen Pfad :
Deleting Nachname^Vorname1-Vorname1_29_06_2016_XX_text_Diät_XY_Text3

als $pfad - Ausgabe korrekterweise :
i:\Name_Server\Verzeichnis\1verzeichnis\2verzeichnis\Nachname^Vorname1-Vorname1_29_06_2016_XX_text_Diät_XY_Text3

allerdings diese Fehlermeldung (und auch keine Löschung) :
Remove-Item : Der Zugriff auf die Clouddatei wurde verweigert
In Zeile:17 Zeichen:8
+        Remove-Item $pfad -Recurse -Force -Confirm:$false
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Remove-Item], Win32Exception
    + FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.PowerShell.Commands.RemoveItemCommand

oder hat jemand eine elegantere Methode ?

Content-ID: 1757025697

Url: https://administrator.de/forum/verzeichnis-mit-inhalt-groesser-30-tage-loeschen-via-powershell-1757025697.html

Ausgedruckt am: 22.12.2024 um 08:12 Uhr

killtec
killtec 24.01.2022 aktualisiert um 16:27:50 Uhr
Goto Top
Hi,
hier mal mein Script, macht das gleiche in einem Verzeichnis:

# Alle Dateien, die Aelter 30 Tage sind werden geloescht.
Get-childitem C:\PATH\TO\FILES -recurse -file | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item

Der Benutzer der dann die Batch ausführt muss zwingend Zugriff auf das Verzeichnis haben face-smile
Gruß
Crashzero
Crashzero 24.01.2022 um 16:36:26 Uhr
Goto Top
Leider funktioniert das nicht.

In z.B.
c:\test1\test2\DatenVerzeichniss^datei_test

es soll alles (Verzeichnisse und deren Unterverzeichnisse mit Dateien in der Unterzeichnissen ohne Rückfrage gelöscht werden.

Also alles unter der Verzeichnistiefe c:\test1\test2\ (Diese Struktur bleibt erhalten)

Das Verzeichnis "DatenVerzeichniss^datei_test" hat diverse Unterverzeichnisse mit Dateninhalt.
killtec
killtec 24.01.2022 um 16:37:44 Uhr
Goto Top
Ich lösche hier die Dateien, das lässt sich aber auch auf Verzeichnisse anwenden.
Crashzero
Crashzero 24.01.2022 um 16:45:48 Uhr
Goto Top
Hmmmm, merkwürdig.
Hab ein solches Verzeichnis :
"i:\DICOM_SRVT1\StoreImages\Freigaben\Patientendaten\Name_29_06_2016_AB_abc_Diät_YY_Links"

hab dort das Datum auf 01.01.2021 gesetzt.

Hab nun auch die Dateien darin auf z.B. 01.01.2021 gesetzt, nun löscht das Script zwar alle abgelaufenen Dateien, nicht aber die Verzeichnisse die auch das abgelaufene Datum haben.
killtec
killtec 24.01.2022 um 16:48:00 Uhr
Goto Top
Hast du denn den Parameter -file weg gelassen?
Crashzero
Crashzero 24.01.2022 um 16:54:39 Uhr
Goto Top
Jo, gleicher Effekt :
Get-childitem "c:\Verzeichnis1\Verzeichnis2\Verzeichnis3\Datenverzeichnis\" -recurse | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item