Seite 1 von 1
benötige Hilfe bei Powershell Script: alle Ordner inkl. Dateien löschen
Verfasst: 10.07.2023, 10:39
von Holgi
Hallo Mitstreiter!
Könnte mir jemand von euch Unterstützung bei einem Powershell Script leisten?
Dieses soll alle Ordner und Dateien innerhalb vorgegebener Ordner löschen. Ebenfalls sollen leere Ordner gelöscht werden.
Kurz gesagt: es soll total aufgeräumt werden. Läuffähig unter Windows 11.
Ein Script für
leere Ordner löschen habe ich schon mal gefunden.
Vlt. kann da jemand so aufbohren, dass auch nicht leere Ordner gelöscht werden?
Ich weiß: es birgt Gefahren. Dessen bin ich mir bewußt.
Das Script soll sogar ohne Rückfragen die Ordner und Dateien löschen! Inkl. Systemdateien. Ausnahme: die desktop.ini in $rootPath
Hier mal der Ansatz (für leere Ordner):
Code: Alles auswählen
# Root-Verzeichnis, welches durchlaufen werden soll
$rootPath = "C:\Users\Administrator\Documents"
# Alle Elemente im Root-Verzeichnis REKURSIV auslesen
foreach($childItem in (Get-ChildItem $rootPath -Recurse))
{
# wenn es sich um einen Ordner handelt UND dieser leer ist
if( ($childItem.PSIsContainer) -and (!(Get-ChildItem -Recurse -Path $childItem.FullName)))
{
# leeren Ordner löschen
Remove-Item $childItem.FullName -Confirm:$false
}
}
Kann man die Zeile
noch verallgemeinern? (aktueller User)?
Wie würde das Ganze aussehen, wenn man es ohne Powershell bewerkstelligen wollte?
Re: benötige Hilfe bei Powershell Script: alle Ordner inkl. Dateien löschen
Verfasst: 10.07.2023, 15:02
von Holgi
so, habs jetzt gerade einigermaßen selbst hinbekommen.
Mein Script (Teil einer komplexen cmd-Batch) sieht so aus:
Code: Alles auswählen
taskkill /F /IM explorer.exe 1>NUL 2>NUL & start explorer 1>NUL 2>NUL
cd \
powershell Remove-item -Path "$env:LOCALAPPDATA\Temp\*" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:LOCALAPPDATA\OneDrive" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:LOCALAPPDATA\Microsoft\Excel" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:LOCALAPPDATA\Microsoft\Office" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:LOCALAPPDATA\Microsoft\Word" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:LOCALAPPDATA\Microsoft\OneDrive" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:LOCALAPPDATA\0install.net" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:APPDATA\Microsoft\Excel" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:APPDATA\Microsoft\Office" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:APPDATA\Microsoft\PowerPoint" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:APPDATA\Microsoft\Office" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:APPDATA\Microsoft\Word" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:APPDATA\0install.net" -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:Public\Pictures\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:Public\Music\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:Public\Videos\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:Public\Documents\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:Public\Desktop\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:Public\Downloads\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:HOMEPATH\Pictures\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:HOMEPATH\Music\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:HOMEPATH\Videos\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:HOMEPATH\Documents\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:HOMEPATH\Desktop\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:HOMEPATH\OneDrive\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "$env:HOMEPATH\Downloads\*" -exclude desktop.ini -force -Confirm:$false -Recurse
powershell Remove-item -Path "C:\PerfLogs" -force -Confirm:$false -Recurse
(goto) 2>nul&rd /s /q "%~dp0"
Das Einzige was noch stört ist, dass der Ordner und Unterordner, in welchem das Script ausgeführt wird (sagen wir mal %homepath%\Downloads\Test1\Test\ selbst nicht gelöscht werden. Weiß nicht, ob das überhaupt möglich ist.
Re: benötige Hilfe bei Powershell Script: alle Ordner inkl. Dateien löschen
Verfasst: 10.07.2023, 17:42
von Jens1976
Das geht auch nicht, weil das Script ja selber noch läuft. Dann müßte es sich ja selber löschen. Eventuell könnte man das so hinbiegen, das dieser Pfad samt Inhalt beim nächsten Neustart automatisch gelöscht wird. Da läuft das Script ja nicht, also ist die Datei auch nicht geschützt...
Eventuell könnte man da nen Aufruf in der Registry plazieren im "RunOnce" 
Also Dateien nach einem Neustart kann man folgendermaßen löschen:
Registrypfad
Code: Alles auswählen
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
Dort einen neuen Eintrag erstellen "Neu> Wert der mehrteiligen Zeichenfolge" im Kontextmenü und folgendermaßen benennen: "PendingFileRenameOperations". Nicht von dem "Rename" irritieren lassen...
Das dann anklicken um die Werteigenschaften zu laden. "\??\Dateipfad" einfügen. "Dateipfad" ist ein Platzhalter. Das ganze kann man dann ja vom Script aus per "Reg add" einfügen. Ob das auch mit Ordnern funktioniert, kann ich nicht sagen, müßte man mal testen...
Re: benötige Hilfe bei Powershell Script: alle Ordner inkl. Dateien löschen
Verfasst: 10.07.2023, 18:04
von Holgi
Jens1976 hat geschrieben: 10.07.2023, 17:42
Das geht auch nicht, weil das Script ja selber noch läuft.
Tja, grds. bin ich deiner Meinung. Aber so wie das Script jetzt läuft, wird das ausführende Script (eine *.cmd) ja selbst gelöscht.
Dies geschieht wohl durch die Zeile
,
oder bereits durch
Code: Alles auswählen
powershell Remove-item -Path "$env:HOMEPATH\Downloads\*" -exclude desktop.ini -force -Confirm:$false -Recurse
.
Da müßte ich noch mal herausfinden.
Es werden nur nicht die Ordner (Unterordner), in denen sich das Script befindet (befand) gelöscht.
Sind dann zwar nur zwei leere Ordner (bei mir im Ordner User\Downloads), aber wäre halt schön, wenn man die noch wegbekäme.
Re: benötige Hilfe bei Powershell Script: alle Ordner inkl. Dateien löschen
Verfasst: 10.07.2023, 18:12
von Jens1976
Eventuell gehts ja mit dem Registrytrick oberhalb. Mit ein bissle Glück kannst da bei einem Neustart wowohl die Ordner als auch gleich das Script dadrin löschen...