Set-Location, pushd, popd: Verzeichnis und Registry-Position wechseln in PowerShell

    Zu den fundamentalen Kommandos in jeder interaktiven Shell gehören jene, mit denen man sich durch Verzeichnisbäume bewegen kann. In PowerShell dient das Cmdlet Set-Location diesem Zweck, wobei es auch in der Lage ist, durch die hierarchische Datenbank der Registry zu navigieren. Ergänzend zu Set-Location gibt Get-Location Auskunft über das aktuelle Verzeichnis. Pop-Location und Push-Location verwalten den Stack für gespeicherte Directories.

    In seiner einfachsten Form, die meistens zum Einsatz kommt, ist die Verwendung von Set-Location genauso trivial wie jene von cd unter cmd.exe oder einer Unix-Shell. Man übergibt ihm den Pfad zum Verzeichnis, in das man wechseln möchte, als einziges Argument. Für einen dermaßen häufig benötigten Befehl verursacht der Name von Set-Location jedoch zu viel Tipparbeit, so dass man in der Regel eines der vordefinierten Aliase nehmen wird.

    Aliase für Set-Location

    Die Eingabe von

    Get-Alias -Definition Set-Location

    zeigt, dass es davon gleich 3 gibt, nämlich sl, cd und chdir. Die beiden letzten sind offensichtlich dafür gedacht, den Umstieg vom alten Kommandointerpreter auf PowerShell zu erleichtern.

    Varianten bei der Angabe von Pfaden

    Neben der simplen Form für den Verzeichniswechsel nimmt Set-Location wie cd in der alten Eingabeaufforderung auch Umgebungsvariablen als Argument. Die Notation dafür ist jedoch anders, so dass man etwa statt %systemroot% die Form $env:systemroot angeben muss.

    Wie der alte cd-Befehl akzeptiert auch Set-Location die Verwendung von Wildcards im Verzeichnisnamen, also zum Beispiel

    Set-Location Eigene*

    Möchte man die Interpretation von bestimmten Zeichen im Pfad verhindern, dann übergibt man ihn mit dem Parameter -LiteralPath. Der Wechsel in das Home-Verzeichnis kann wie unter Unix durch die Angabe der Tilde als Argument erfolgen, also cd ~.

    Auch bei der PowerShell entnimmt man normalerweise das aktuelle Arbeitsverzeichnis dem Prompt. Wenn es daraus nicht hervorgeht, dann kann man es explizit mit Get-Location erfragen. Es entspricht dem pwd unter Unix, das daher als Alias für Get-Location definiert wurde.

    Verwenden von Verzeichnis-Stacks

    Darüber hinaus dient dieses Cmdlet auch dazu, den Inhalt der Verzeichnisstapel anzuzeigen. Neben dem unbenannten Stack kann man auch eigene benannte Stapel definieren und verwenden. Der Aufruf von

    Get-Location -StackName ""

    zeigt den Inhalt des Standard-Stacks an, der in den meisten Fällen ausreichen dürfte.

    Man nutzt ihn nach dem gleichen Muster wie unter Unix oder cmd.exe, wobei Push-Location (Alias pushd) das aktuelle Arbeitsverzeichnis auf den Stapel legt und gleichzeitig in das Verzeichnis wechselt, das als Argument angegeben wurde. Zum Beispiel würde

    Push-Location '.\Eigene Dateien'

    in das Unterverzeichnis "Eigene Dateien" wechseln und etwa "C:\Dokumente und Einstellungen\user" auf dem Stapel speichern. Zu einem beliebigen späteren Zeitpunkt kann man durch Eingabe von Pop-Location (Alias popd) wieder dorthin zurückkehren, wobei der letzte Eintrag vom Stack entfernt wird.

    Benannte Stacks

    Will man eigene benannte Stacks nutzen, dann kann man sie mit Push-Location anlegen und mit Set-Location zum aktuellen Verzeichnisstapel machen. Diese Befehlsfolge speichert das aktuelle Verzeichnis auf dem Stapel MyStack, wechselt in das Verzeichnis "Eigene Dateien", macht MyStack zum aktiven Stack und zeigt seinen Inhalt mit Get-Location an:

    Push-Location -StackName MyStack '.\Eigene Dateien'
    Set-Location -StackName MyStack
    Get-Location -Stackname MyStack

    Navigation durch die Registry

    Wie andere Cmdlets, beispielsweise Get-ChildItem oder New-Item, kann sich auch Set-Location den PowerShell-Provider für die Registry zunutze machen, der diese als Laufwerk mountet.

    Während das Dateisystem als Standard eingestellt ist und keine besondere Kennzeichnung braucht, muss man den Cmdlets über ein Präfix mitteilen, dass man durch die Registry navigieren möchte. Dieses besteht aus den Namen für die Container im Wurzelverzeichnis, also HKEY_CURRENT_USER (HKCU) oder HKEY_LOCAL_MACHINE (HKLM):

    Set-Location HKLM:\Software\Microsoft

    Wie im Dateisystem kann man mit den gleichen Cmdlets auch hier Stacks verwenden, um in tiefen Hierarchien wieder einfach zu vorher besuchten Orten zurückzukehren.

    Keine Kommentare