Tags: PowerShell, Kommandozeile
PowerShell bietet wie einige andere Kommandointerpreter einen Alias-Mechanismus, der alternative Namen für Cmdlets oder Befehle definieren kann. Er dient vor allem dazu, Tipparbeit in einer interaktiven 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 Funktionsumfang 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 Eingabeaufforderung in fast allen Bereichen Fortschritte bringt, kann man das bei der Nutzung von Aliasen kaum behaupten. Sie beschränken sich auf die simple Bereitstellung 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.
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.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Windows Terminal 1.6 Preview erhält GUI für Einstellungen, v1.5 nun offizielles Release
- PowerShell 7.1 (als Store-App) verfügbar, Updates für PSReadLine, SecretManagement und PowerShellGet
- Fehler beim Ändern der Zeitzone in Windows Server 2019: Kommandozeile als Alternative
- Systemzeit remote auf der Kommandozeile oder mit PowerShell abfragen
- Benutzereingaben in PowerShell: Read-Host, mandatory = $true, Out-GridView
Weitere Links