Get-Alias, Set-Alias: Kurznamen für PowerShell-Befehle

    PowerShell-AliasPowerShell bietet wie einige andere Kom­mando­inter­preter einen Alias-Mecha­nismus, der alternative Namen für Cmdlets oder Befehle definieren kann. Er dient vor allem dazu, Tipparbeit in einer inter­aktiven Sitzung zu sparen. Er leidet jedoch unter einigen Einschränkungen.

    Das Konzept von Kurznamen für Befehle hat sich in der Unix-Welt schon lange etabliert und gehört dort zum Funktions­umfang populärer Shells wie der bash. Unter Windows existiert für diesen Zweck der doskey-Befehl, mit dem man für cmd.exe so genannte Makros definieren kann.

    Einfaches Alias-Konzept

    Während PowerShell gegenüber der alten Eingabe­auf­forderung in fast allen Bereichen Fortschritte bringt, kann man das bei der Nutzung von Aliasen kaum behaupten. Sie beschränken sich auf die simple Bereit­stellung von Kurznamen für Cmdlets und andere Sprachelemente, wobei nicht einmal die Verwendung von Parametern in den substituierten Befehlen möglich ist.

    Eine wichtige Aufgabe von Aliasen in PowerShell besteht darin, den Umstieg von cmd.exe oder einer Unix-Shell zu vereinfachen. Eine ganze Liste von vordefinierten Alternativnamen bildet die alten Befehle ab, in PowerShell 5.0 unter Windows 10 sind es aktuell 155. Darunter finden sich solche wie dir, cd, rd oder pushd.

    Diese vorgegebenen Aliase sind schreibgeschützt, so dass man einen von ihnen belegten Kurznamen nicht ohne Weiteres mit einer neuen Bedeutung versehen kann. Vielmehr muss man eine solche Neudefinition durch die Verwendung des Schalters Force in New-Alias oder Set-Alias erzwingen.

    Alternative Namen für interaktive Sessions

    Aliase sollen zwar die Eingabe von Befehlen auf der Kommandozeile vereinfachen, sie funktionieren grundsätzlich aber auch in Scripts. Tippfaulheit kann sich dort jedoch rächen, wenn verwendete Kurznamen später auf bestimmten Rechnern nicht verfügbar sind. Daher ist es Best Practice, Aliase in Scripts nicht zu verwenden, auch nicht die von Microsoft vordefinierten.

    Alternative Namen erweisen sich generell als flüchtig, weil ihre Definition nur für die aktuelle Sitzung gilt. Sollen sie Bestand haben, dann muss man sie bei jedem Start von PowerShell neu erzeugen, indem man das dafür nötige Kommando in das Profil aufnimmt.

    Cmdlets für Aliase

    Insgesamt fünf Cmdlets dienen dem Management von Aliases in PowerShell:

    • New-Alias
    • Get-Alias
    • Set-Alias
    • Export-Alias
    • Import-Alias

    Wirklich relevant sind indes nur zwei, nämlich Get-Alias und Set-Alias. New-Alias ist redundant, weil seine Funktion auch durch Set-Alias erbracht wird. Die beiden letzten dienen nur dem Transfer von Alias-Definitionen, indem man sie in eine Datei schreiben und von dort wieder einlesen kann.

    Aliase anzeigen mit Get-Alias

    Will man herausfinden, welche Aliase auf einem Rechner definiert sind, dann hilft Get-Alias weiter. Ruft man es ohne Parameter auf, dann spuckt es alle vorhandenen Definitionen aus, und zeigt den Kurznamen plus das dadurch ersetzte Kommando an.

    Eine grafische Ansicht der Aliase erhält man über Get-Alias | select Name, Definition | Out-GridView

    Möchte man diese Liste filtern, dann kann man dies wahlweise über die Parameter Definitions oder Name tun. Ersterer dient dazu, in den ersetzten Befehlen zu suchen, Zweiterer in den Namen der Aliase:

    Get-Alias -Definition Get* # Aliase für Befehle, die mit Get beginnen

    Get-Alias -Name sl* # Aliase, deren Name mit sl beginnt

    Alternativ kann man die Alias-Definitionen als Laufwerk ansprechen und sich dort mit Get-ChildItem einen Überblick verschaffen:

    cd Alias:
    Get-Item sl*

    Aliase definieren mit Set-Alias

    Um einen neuen alternativen Namen festzulegen oder die Bedeutung eines existierenden zu ändern, ruft man Set-Alias im einfachsten Fall mit den Parametern Name und Value auf:

    Set-Alias -Name sudo -Value runas

    Dieses Beispiel legt sudo als alternativen Namen für runas fest. Dabei wäre es natürlich praktisch, wenn man das Alias so verwenden könnte wie sudo unter Unix, also zum Beispiel

    sudo vi .bashrc

    Das würde aber voraussetzen, dass man das Alias so erzeugt:

    Set-Alias -Name sudo -Value "runas /user:Administrator"

    Dies ist aber nicht zulässig, für diese Aufgabe müsste man stattdessen eine function schreiben.

    Beim Anlegen eines Alias kann man auf Wunsch mit description eine Beschreibung hinzufügen und mit -Option readonly schützt man es gegen versehentliches Überschreiben:

    Set-Alias -Name sudo -Value runas -Description "Privilegien erhöhen" -Option readonly

    Aliase löschen

    Im Allgemeinen besteht kein großer Bedarf zum Löschen von alternativen Namen, weil sie ohnehin nur für die aktuelle Sitzung gelten. Möchte man jene loswerden, die über das Profil geladen werden, dann entfernt man einfach dort ihre Definition.

    Kniffliger ist die Sache bei eingebauten Aliasen. Diese muss man bei jedem Start von PowerShell mit Remove-Item löschen, indem man diesen Befehl in das Profil aufnimmt:

    Remove-Item alias:cd

    Damit würde man den vordefinierten Kurznamen für Set-Location dauerhaft entfernen.

    Keine Kommentare