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


    Tags: ,

    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.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut

    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links