Kommandozeile und Befehlshistorie in PowerShell bearbeiten mit PSReadline

    Get-Module PSReadlineGNU Readline ist eine Biblio­thek mit Funktionen zur Bear­beitung von Befehls- und Programm­zeilen. Microsoft hat sie für Power­Shell adaptiert und so den Bedien­komfort der Kon­sole deutlich erhöht. Davon profi­tieren Anwender besonders beim Zugriff auf die Historie der Kom­mandos sowie bei der Auto­vervoll­ständigung.

    Im Vergleich zur PowerShell ISE, die als grafischer Editor die Script-Entwickler mit einer Reihe von intelligenten Funktionen unterstützt, waren die Editier­möglich­keiten in der textorientierten PowerShell bisher beschränkt. Sie bot dabei kaum mehr als der alte Kommando­interpreter, speziell beim Wieder­verwenden von Befehlen aus der History (siehe dazu: Get-History: PowerShell-Befehle wiederholen auf der Kommandozeile).

    PSReadline seit Windows 10 an Bord

    Microsoft bot zwar seit einiger Zeit PSReadline als separates Modul an, das man unter Windows 7/8 explizit installieren musste. Aber erst seit PowerShell 5.0 gehört es zum Lieferumfang. Unter Windows 10 und Server 2016 ist es somit automatisch vorhanden. Bei älteren Versionen des Betriebs­systems erhält man es jetzt am einfachsten, indem man die aktuelle PowerShell über WMF nachinstalliert.

    PSReadline definiert eine Fülle von Tasten­kombinationen, die sich vermutlich nur Emacs-Gurus komplett merken können. Aber selbst wenn man davon nur eine Handvoll verwendet, kann man sich das Leben auf der Kommando­zeile schon wesentlich leichter machen.

    Unterstützung für Copy & Paste, Rückgängig

    Keiner Gedächtnis­leistung bedarf es, um die Tastenkom­binationen für Rückgängig, Kopieren und Einfügen oder Ausschneiden zu behalten. Diese sind nämlich gleich wie bei den GUI-Anwendungen, also STRG + Z, STRG + C, STRG + V und STRG + X. Auch das Markieren von Text funktioniert wie gewohnt über STRG + Pfeil links / rechts.

    Text markieren und kopieren mit PSReadline

    Erweiterte Autovervollständigung

    PowerShell selbst bietet eine automatische Vervoll­ständigung von Cmdlet- und Parameter­namen. Mit Tab bzw. STRG + Tab rotiert man vorwärts oder rückwärts durch die Liste. Bei Cmdlets mit sehr vielen Parametern ist das nicht sehr praktisch, vor allem dann, wenn man sich erst einen Überblick verschaffen möchte.

    PSReadline bietet hier mit STRG + Leertaste eine Alternative. Diese Kombination zeigt eine Liste aller Parameter, durch die man sich mit den Pfeiltasten bewegen kann. Der gerade markierte wird dann automatisch in die Befehlszeile übernommen.

    Alle verfügbaren Parameter eines Cmdlets anzeigen mit STRG + Leertaste

    Dieses Verfahren funktioniert auch für die vorgegebenen Werte eines Parameters, beispielsweise für ErrorAction. Möchte man sich auf diese Weise etwa für Get-CimInstance die WMI-Klassen anzeigen lassen, dann sollte man diese Liste durch Eingabe der ersten Buchstaben eingrenzen, andernfalls erhält man hunderte Namen.

    Bei einer sehr großen Zahl an möglichen Werten für einen Parameter fragt PSReadline nach, ob man sie anzeigen möchte.

    Dauerhafte History

    Große Fortschritte bringt PSReadline bei der Befehls­historie. PowerShell speicherte bisher nur die Kommandos der aktuellen Sitzung und verwarf sie nach deren Ende. Das neue Modul bewahrt sie hingegen permanent auf, und zwar per Default bis zu 4096 Befehle.

    Abfragen lässt sich diese Einstellung mit

    Get-PSReadlineOption | select MaximumHistoryCount

    Möchte man diesen Wert ändern, wofür normal keine Veranlassung besteht, dann kann man das mit einem Befehl nach diesem Muster tun:

    Set-PSReadlineOption -MaximumHistoryCount 2048

    Suche in der Befehlshistorie

    Ein weiteres interessantes Feature ist die Suche in der History. Dazu drückt man STRG + r und gibt die gewünschte Zeichenkette ein. Ist der erste Treffer nicht der, den man benötigt, dann wiederholt man die Eingabe von STRG + r, bis man den richtigen Befehl angezeigt bekommt.

    Zu PSReadline gehört auch eine Suchfunktionen für die Befehlshistorie

    Zu dieser Rückwärts­suche gibt es ein Gegenstück für die Vorwärtssuche mit STRG + s. Sie braucht man, wenn man mit der Pfeiltaste nach oben oder mit F8 bereits die Historie ein Stück durchlaufen hat und wieder in der Gegenrichtung suchen möchte.

    Liste der Kommandos löschen

    Die Befehlshistorie löschen kann man mit ALT + F7. Das betrifft aber nur die Abfolge von Kommandos, die PSReadline selbst speichert, und zwar in der Datei, die man über

    Get-PSReadlineOption | select HistorySavePath

    erfragen kann. Davon unberührt bleibt die Liste der Befehle, die man mit Get-History zu sehen bekommt und die nur die jeweilige Session umfassen.

    Eigene Tastenkombinationen belegen

    PSReadline bietet noch eine ganze Reihe von Funktionen, die aber noch keiner Tastenkombination zugeordnet sind. Dies kann man bei Bedarf selbst nachholen, und zwar nach diesem Muster:

    Set-PSReadlineKeyHandler -Chord Alt+v -Function ValidateAndAcceptLine

    In diesem Beispiel legt man fest, dass die Funktion ValidateAndAcceptLine, welche einen Befehl vor dem Abschicken auf Korrektheit prüft, über Alt + v abgerufen werden kann.

    Viele Funktionen von PSReadline sind noch nicht mit einer Tastenkombination belegt.

    Welche Funktionen über welche Tasten­kombination erreichbar und welche gar nicht belegt sind, lässt sich mit

    Get-PSReadlineKeyHandler

    abfragen.

    Keine Kommentare