Tags: Datei-Management, PowerShell
Ein Verzeichnis zu erstellen oder zu löschen ist mit cmd.exe und damit in Batch-Dateien eine recht einfache Sache. Powershell dagegen ist ganz allgemein komplizierter, aber auch mächtiger, und so gibt es bei diesen relativ simplen Aufgaben mehr zu bedenken als bei den herkömmlichen Methoden.
Für das Anlegen und Löschen von Verzeichnissen bietet die Powershell 2 Cmdlets, New-Item und Remove-Item. Im Vergleich zu einem einfachen md in der Eingabeaufforderung wirkt der Aufruf von New-Item ziemlich aufwändig:
New-Item -Path briefe -ItemType directory
Ein bisschen Tipparbeit lässt sich sparen, indem man den Namen des Parameters -Path weglässt und den Pfad des neuen Verzeichnisses direkt angibt. Gleichzeitig kann man aber bei Bedarf noch weitere Optionen in Anspruch nehmen, die auch bei anderen Cmdlets zur Verfügung stehen. So lassen sich beim Anlegen eines Verzeichnisses auf einem entfernten Rechner via UNC-Pfad über den Parameter -Credentials die Anmeldedaten eines Benutzers übergeben.
Einfachere Variante über md-Alias
Um die gängigsten Befehle in Powershell kompatibel mit cmd.exe zu gestalten und den Umstieg zu erleichtern, hat Microsoft eine Reihe von Aliases und functions nach dem Vorbild der cmd.exe vordefiniert. Sie dienen als Hülle über den komplexeren Cmdlets. So existiert in Powershell ein Alias namens md, das allerdings auf nicht auf New-Item, sondern auf mkdir verweist, wie der Aufruf
alias md
belegt. Bei mkdir seinerseits handelt es sich um eine vordefinierte und erstaunlich umfangreiche Funktion, wie der Aufruf von
$function:mkdir
zeigt. Das md-Alias auf die mkdir-Funktion lässt es somit zu, ein Verzeichnis genauso zu erstellen wie unter cmd.exe. Allerdings bleiben die erweiterten Optionen des Cmdlets New-Item erhalten, so dass man weiterhin die Parameter -Credentials oder -Verbose angeben kann. Die Powershell-Variante ist übrigens auch in der Lage, mehrere Verzeichnisse auf einmal zu erstellen, wenn man einen längeren Pfad zum Zielverzeichnis angibt.
Verzeichnisse mit Wildcards löschen
Beim Löschen von Verzeichnissen in Powershell verhält es sich ähnlich wie beim Anlegen, jedoch ist der Vorgang etwas einfacher, weil man dem Cmdlet Remove-Item bzw. dem Alias rd nur den Pfad des Verzeichnisses übergeben muss.
Allerdings bestehen auch hier fortgeschrittene Möglichkeiten, die über den rd-Befehl von cmd.exe hinausgehen. So akzeptiert Remove-Item auch Wildcards in den Pfadangaben, zum Beispiel löscht
rd te*
die Verzeichnisse test und temp.
Die Powershell bietet gleichzeitig die Option, ganze Verzeichnisbäume zu entfernen. Der dafür zuständige Parameter -recurse funktioniert laut Hilfe angeblich nicht ordnungsgemäß. Wird er weggelassen und ein Verzeichnis zum Löschen angegeben, das weitere Verzeichnisse enthält, dann frägt das Cmdlet nach und will den rekursiven Löschvorgang bestätigt haben.
Schreibgeschützte oder versteckte Verzeichnisse lassen sich mit Hilfe der Option -Force ebenfalls eliminieren. Beim Entfernen ganzer Ordnerstrukturen ist es sinnvoll, wenn man den Vorgang erst durch Verwendung des Parameters -WhatIf simuliert.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links
1 Kommentar
Wie immer ein sehr hilfreicher und informativer Artikel. Danke Wolfgang!