Tags: PowerShell, Scripts
GNU Readline ist eine Bibliothek mit Funktionen zur Bearbeitung von Befehls- und Programmzeilen. Microsoft hat sie für PowerShell adaptiert und so den Bedienkomfort der Konsole deutlich erhöht. Davon profitieren Anwender besonders beim Zugriff auf die Historie der Kommandos sowie bei der Autovervollständigung.
Im Vergleich zur PowerShell ISE, die als grafischer Editor die Script-Entwickler mit einer Reihe von intelligenten Funktionen unterstützt, waren die Editiermöglichkeiten in der textorientierten PowerShell bisher beschränkt. Sie bot dabei kaum mehr als der alte Kommandointerpreter, speziell beim Wiederverwenden 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 Betriebssystems erhält man es jetzt am einfachsten, indem man die aktuelle PowerShell über WMF nachinstalliert.
PSReadline definiert eine Fülle von Tastenkombinationen, 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 Kommandozeile schon wesentlich leichter machen.
Unterstützung für Copy & Paste, Rückgängig
Keiner Gedächtnisleistung bedarf es, um die Tastenkombinationen 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.
Erweiterte Autovervollständigung
PowerShell selbst bietet eine automatische Vervollständigung von Cmdlet- und Parameternamen. 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.
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.
Dauerhafte History
Große Fortschritte bringt PSReadline bei der Befehlshistorie. 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 dieser Rückwärtssuche 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.
Welche Funktionen über welche Tastenkombination erreichbar und welche gar nicht belegt sind, lässt sich mit
Get-PSReadlineKeyHandler
abfragen.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- WhatIf, Confirm und Force: Ausführung von PowerShell-Cmdlets steuern
- ScriptRunner Portal Edition R5: Konfiguration von Abfragen, OpenID-Support, Web-API statt IIS
- ScriptRunner Portal Edition R4: Support für Microsoft Graph, überarbeitetes Portal, zentrale Execution-Policy
- Microsoft Graph: Einheitliches (PowerShell)-API für Microsofts Cloud-Dienste
- Strings ersetzen oder löschen mit PowerShell
Weitere Links