Tags: Datei-Management, PowerShell
Wenn sich Dateien nicht löschen oder bearbeiten lassen, obwohl sie in keinem Programm mehr geöffnet sind, dann hilft oft nur ein Neustart des Rechners. Diesen kann man vermeiden, wenn man das Schließen der Datei mit Handle erzwingt. Unblock-File in PowerShell dient dagegen einem anderen Zweck.
Grundsätzlich ist es absolut wichtig, dass Windows Dateien für den schreibenden Zugriff sperrt, wenn sie bereits in einem anderen Programm geöffnet sind. Andernfalls sind Datenverluste vorprogrammiert. Diese drohen allerdings auch, wenn man Dateien zwangsweise schließt, während eine Anwendung noch in sie schreibt.
Vorsicht beim Einsatz von Handle
Entsprechend sollte man mit solchen Tools vorsichtig hantieren und sie nur einsetzen, wenn eine Datei ohne ersichtlichen Grund weiterhin blockiert wird. Eines dieser Werkzeuge, die geöffnete Dateien schließen können, ist das kostenlose Handle aus der Sysinternals-Sammlung.
Es handelt sich dabei um ein Tool für die Kommandozeile, das eine Reihe von Parametern akzeptiert. Ruft man es ohne Argumente auf, dann spuckt es eine endlos lange Liste mit allen Datei-Handles aus. Wenn man nur eine bestimmte Datei schließen möchte, dann wird man diesen Output nicht sehen wollen.
Ausgabe eingrenzen
Vielmehr empfiehlt es sich in diesem Fall, Handle einen Suchbegriff mitzugeben, mit dem sich die betreffende Datei finden lässt, typischerweise ein Fragment des Dateinamens oder des Pfades:
handle -u 49D5C3E2
Der Schalter -u bewirkt, dass zusätzlich das Konto angegeben wird, unter dem der Prozess läuft. Die Ausgabe für das Programm namens vmms.exe könnte dann so aussehen:
vmms.exe
pid: 2412
type: File: NT-AUTORIT─T\SYSTEM
F24: I:\Hyper-V\Win10-LTSB-VM1-L1\Snapshots\49D5C3E2-193D-4970-AD10-F195EDB7E382.xmlvmms.exe
pid: 2412
type: File: NT-AUTORIT─T\SYSTEM
F44: C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots Cache\49D5C3E2-193D-4970-AD10-F195EDB7E382.xml
Diesem Ergebnis entnimmt man nun die Prozess-ID (pid) und die hexadezimale Nummer des File-Handle, im obigen Beispiel wären das F24 bzw. F44. Nun kann man die erste der beiden Dateien mit diesem Aufruf schließen:
handle -c F24 -p 2412
Das Tool lässt sich die Aktion anschließend noch bestätigen. Diese Nachfrage kann man durch den Schalter -y unterbinden.
Blockierte Dateien entsperren mit PowerShell
PowerShell verfügt seit der Version 3 über das Cmdlet Unblock-File, das auf den ersten Blick dem gleichen Zweck dienen könnte. Seine Aufgabe besteht aber darin, aus dem Internet heruntergeladene Dateien für die Bearbeitung freizugeben. Diese Information wird in NTFS-Streams gespeichert und von einigen Programmen wie etwa Office ausgewertet.
Über die GUI kann man diese Blockade lösen, indem man den Eigenschaften-Dialog einer Datei öffnet und dort im unteren Abschnitt den Button Zulassen klickt.
In PowerShell dient Unblock-File diesem Zweck. Das Cmdlet erwartet den Pfad und Dateinamen als einziges Argument, wobei Wildcards erlaubt sind:
Unblock-File *.pdf
Möchte man auch die Dateien in allen Unterverzeichnissen einbeziehen, dann muss man Get-ChildItem zu Hilfe nehmen:
gci -r *.xml | Unblock-File
Bei gci handelt es sich um ein Alias für Get-ChildItem und der Schalter -r steht für recurse.
Täglich Know-how für IT-Pros mit unserem Newsletter
Ähnliche Beiträge
Weitere Links