Remove-Item: Temporäre Dateien löschen mit PowerShell

    Zu den gängigen Tätigkeiten der Systemwartung gehört die Entfernung von temporären Dateien. Dies ist notwendig, weil viele Programme nach ihrem Beenden darauf verzichten, solche Hinterlassenschaften selbst zu entfernen. Mit PowerShell lässt sich der von tmp-Dateien verbrauchte Platz leicht zurückgewinnen.

    Bevor man mit dem Löschen beginnt, ist es sinnvoll, sich einen Überblick über die Anzahl und die Speicherorte der temporären Dateien zu verschaffen. Wenn man etwa wissen möchte, wie viele dieser Dateien in jenem Verzeichnis liegen, auf das die Variable %temp% zeigt, dann hilft folgender Befehl:

    gci -r -force $env:temp | measure | select count | fl

    Get-ChildItem (Alias gci) findet mit den Schaltern -r (recursive) und -force alle Dateien in %temp% und seinen Unterverzeichnissen, auch wenn die Attribute versteckt oder System gesetzt sind. Die Eigenschaft count des von measure zurückgegebenen Objekts enthält die Anzahl der Dateien.

    Alle Verzeichnisse mit tmp-Dateien anzeigen

    Will man herausfinden, ob sich im Benutzerprofil auch außerhalb von %temp% temporäre Dateien verstecken, dann könnte man in der Annahme, dass diese die Endung *.tmp tragen, so vorgehen:

    gci -r -force -include *.tmp -ErrorAction SilentlyContinue $env:USERPROFILE | %{$_.DirectoryName} | sort -Unique

    In diesem Fall ermittelt Get-ChildItem alle *.tmp-Dateien im Benutzerprofil, die anschließende Schleife extrahiert daraus die Verzeichnisnamen, und aus denen entfernt schließlich sort die Dubletten. Der Schalter -ErrorAction SilentlyContinue sorgt übrigens dafür, dass PowerShell auf die Ausgabe von Fehler­meldungen verzichtet, wenn gci mangels Rechten auf Verzeichnisse nicht zugreifen kann.

    Dateien entfernen mit Remove-Item

    Für das Löschen der Dateien ist das Cmdlet Remove-Item zuständig, für das es mehrere vordefinierte Aliases gibt (u.a. del, rm, erase). Folgendes Beispiel geht der Einfachheit halber davon aus, dass nur die Dateien in %temp% und allen seinen Unterverzeichnissen entfernt werden sollen. Für andere Ordner, in denen man temporäre Dateien gefunden hat, funktioniert dies nach dem gleichen Muster.

    Remove-Item $env:temp\* -Recurse -Force -WhatIf

    Dieser Aufruf von Remove-Item simuliert das Löschen von sämtlichen Dateien in %temp% und allen seinen Unterverzeichnissen, wobei auch solche berücksichtigt werden, die mit dem Attribut System oder versteckt versehen sind. Lässt man -WhatIf weg, dann wird aus der Simulation ein tatsächlicher Löschvorgang.

    Keine Kommentare