Skip to the main content.

ScriptRunner Blog

Fünf Gründe für die Nutzung von PSReadLine

Inhaltsverzeichnis

Post Featured Image

Wie gut bist du mit dem Thema vertraut? Vielleicht gibt dir dieser Artikel nur einen Überblick. Aus meiner Erfahrung in der Lehre und auf Konferenzen weiß ich aber, dass ich nicht einfach davon ausgehen kann, mit jedem PowerShell-Nutzer automatisch einen PSReadLine-Profi anzusprechen. Nicht jeder kennt PSReadLine und selbst, wenn du PSReadLine verwendest, nutzt du das volle Potential?

Ich werde dir fünf Gründe nennen, warum es sich lohnt, PSReadLine täglich für die Arbeit mit PowerShell zu nutzen.

 

So bist du startklar:

Als erstes muss sichergestellt werden, dass die neueste Version des Moduls PSReadLine installiert ist. Aber jetzt wird es kompliziert. PSReadLine ist in Windows 10 und Windows Server 2016 und höher enthalten. Aber die Version, die mit Windows ausgeliefert wird, ist nicht die neueste. Wenn man noch nie eine neuere Version des Moduls installiert hat, ist man nicht auf dem neuesten Stand. Meines Wissens wird PowerShell 7 mit der neuesten Version ausgeliefert. Aber das kann man leicht überprüfen.

Das Modul PSReadLine ist in der PowerShell-Galerie verfügbar. Du kannst mit Find-Module überprüfen, welche Version du installiert hast:

Find-Module PSReadLine

Wenn du das neuere PSResourceGet-Modul verwendest, führe das hier aus:

Find-PSResource PSReadLine

Zurzeit ist die neueste Version 2.3.5. Prüfe, welche Version du installiert hast.

Get-Module PSReadLine -ListAvailable

Hier ist ein Windows 10 System, das noch nie aktualisiert wurde.

Du musst wissen, welche Version du hast, denn davon hängt ab, wie du die neue Version aus der installierten PowerShell Gallery bekommst. Das Problem ist, dass PSReadLine mit Windows ausgeliefert wird, was bedeutet, dass du es nicht mit Update‑Module oder Update‑PSResource aktualisieren kannst.

Wenn du eine Fehlermeldung wie diese bekommst, musst du das Modul installieren.


Install-Module PSReadline -Scope AllUsers -Force

Ich ziehe es vor, dieses Modul für alle Nutzer zu installieren. Nach der Installation starte deine PowerShell-Sitzung neu und überprüfe die Version mit Get-Module.

Wenn du eine ältere Versionen installiert hast, sollten die Befehle Update-Module oder Update-PSResource funktionieren.

Nach der Installation oder dem Update von PSReadLine solltest du auch Update-Help PSReadline -force ausführen. Wenn du in Windows PowerShell 5.1 die Fehlermeldung erhältst, dass die Hilfe nicht gefunden werden kann, musst du möglicherweise eine kleine Korrektur vornehmen, um das Problem zu beheben. Ursprünglich hieß das Modul PSReadline mit einem kleingeschriebenen 'l'. Jetzt heißt es PSReadLine und wird mit einem großen 'L' geschrieben. Wenn du auf dieses Problem stößt, folge den Anweisungen von Sean Wheeler im dem Blog des PowerShell-Teams.

 

Automatische Befehlsvervollständigung

Du bist wahrscheinlich mit der Tabulator-Vervollständigung in PowerShell vertraut. Das PSReadLine Modul macht dies möglich. Du kannst die Tabulatorvervollständigung für Befehls- und Parameternamen verwenden. Beginne mit der Eingabe eines Befehls wie Get‑Win und drücke die Tabulator-Taste. PowerShell vervollständigt den Befehlsnamen, Get‑WinEvent, für dich. Wenn es mehrere Übereinstimmungen gibt, drücke die Tabulator-Taste, um zwischen ihnen zu wechseln. Drücke Umschalt-Tab, um rückwärts zu gehen. Wenn du den Namen des Cmdlets hast, drücke -l und die Tabulator-Taste, um alle Parameter zu durchlaufen, die mit 'l' beginnen. Angenommen, du möchtest -ListLog, dann musst du nur den Parameterwert als * eingeben. Mit nur wenigen Tastenanschlägen hast du einen vollständigen Befehl.

Es kommt noch besser. Angenommen, du hast die Parameter nicht mehr im Kopf. Gib den Namen des Befehls gefolgt von einem Bindestrich ein und drücke dann Strg+Leertaste. PSReadLine zeigt eine Liste aller verfügbaren Parameter an.

Wähle den Parameter mit den Pfeiltasten aus und drücke Enter. Wiederhole diesen Vorgang, bis du alle Parameter hast, die du brauchst. PSReadLine ist auch intelligent genug, um Parametersätze zu erkennen. Wenn du einen Befehl mit einem Parameter beginnst, der zu einem bestimmten Parametersatz gehört, werden dir mit Strg+Leertaste nur die passenden Parameter angezeigt.

 

Vorhersage von Befehlen

Wenn es dir gefallen hat, dass PSReadline die zu verwendenden Parameter vorhersagt, wirst du die Befehlsvorhersage lieben. Diese Funktion basiert auf der Idee, dass du oft Befehle in deiner PowerShell-Sitzung wiederholen möchtest. Diese Funktion macht es dir leicht, genau das zu tun. Sie sollte standardmäßig eingeschaltet sein.

PSReadLine speichert den Befehlsverlauf in einer Textdatei. So bleibt dein Befehlsverlauf zwischen PowerShell-Sitzungen erhalten. Die Textdatei wird in deinem AppData-Ordner gespeichert und enthält keine sensiblen Informationen. Es sei denn, du machst einen Fehler und gibst an einer Eingabeaufforderung ein Passwort im Klartext ein. Die entsprechenden Einstellungen kannst du mit Get-PSReadLineOption einsehen.

Das Protokoll ist eine Textdatei, so dass du es bei Bedarf leicht bearbeiten kannst. Mit Set‑PSReadLineOption kannst du den Speicherort ändern.

So verwendet PSReadLine deine Verlaufsdatei. Beginne mit der Eingabe eines Befehls, den du zuvor in deiner Sitzung verwendet hast. PSReadLine zeigt dir eine mögliche Ausführung des Befehls aus deiner Historie an.

Mit den Standardeinstellungen kann es schwierig sein, das zu erkennen.

Vermutlich ist es schwer, den angezeigten Text zu lesen, also möchtest du vielleicht die Einstellung ändern.


Set‑PSReadLineOption -Color @{InLinePrediction = "$([char]27)[3;92m"}

Du kannst jede ANSI Escape-Sequenz oder $PSStyle verwenden. Ich habe mich für grün kursiv entschieden. Diese Änderung gilt nur für die Dauer deiner PowerShell-Sitzung. Füge den Befehl in dein PowerShell-Profilskript ein, um deine Sitzung zu konfigurieren. Aber jetzt ist die Vorhersage viel einfacher zu sehen.

Wenn dies der gewünschte Befehl ist, drücke den Pfeil nach rechts, um die Vorhersage zu akzeptieren. Die Inline-Vorhersage zeigt den letzten Befehl an. Aber schau, was passiert, wenn du F2 drückst.

Wähle den gewünschten Befehl mit den Pfeiltasten aus und drücke Enter. Sei vorsichtig, denn die Befehlshistorie enthält auch Befehle, die fehlgeschlagen sind.

Du kannst jederzeit zwischen der Inline- und der Listenansicht wechseln, indem du F2 und drückst. Wenn du standardmäßig die Listenansicht verwenden möchtest, füge diese Zeile zu deinem PowerShell-Profilskript hinzu:

Set‑PSReadLineOption -PredictionViewStyle ListView

 

Inline-Hilfe

Der nächste Grund, PSReadLine zu verwenden, wurde erst kürzlich hinzugefügt. Deshalb möchte ich sicherstellen, dass du die neueste Version des Moduls verwendest. Ich bin mir sicher, dass dir das schon einmal passiert ist. Du beginnst mit der Eingabe eines Befehls wie diesem:


PS C:\> Get-Acl _

Aber du kannst dich nicht mehr an die Details des Befehls erinnern. Ja, du könntest PSReadline verwenden, um die Parameter zu vervollständigen, aber du willst die Hilfe lesen. Lass den Befehl, wo er ist, und drücke F1. PSReadLine zeigt die komplette Hilfe für den Befehl an.

Scrolle und lies die Hilfe. Wenn du fertig bist, drücke Q und du bist wieder in deiner Befehlszeile, genau da, wo du aufgehört hast. Benutze die Tabulator-Vervollständigung, um den Befehl zu beenden. Wenn du einen Pipeline-Ausdruck hast, kannst du den Cursor auf einen beliebigen Befehl setzen und F1 drücken, um Hilfe zu diesem Befehl zu erhalten. Diese Funktion ist eine echte Zeitersparnis.

 

Key-Handler – spezielle Tastenkombinationen

Der letzte Grund, warum du dir PSReadLine zur Gewohnheit machen solltest, ist die Verwendung von Key-Handlern. Das sind spezielle Tastenzuordnungen oder -kombinationen, mit denen du deine Kommandozeile einfacher bedienen kannst. PSReadLine wird mit vielen Standardtastenbelegungen ausgeliefert. Führe Get-PSReadLineKeyHandler aus, um zu sehen, welche bereits definiert sind.

Du kannst eigene definieren. Du kannst Key-Handler für native PSReadline-Funktionen festlegen. Ich habe zum Beispiel diese Befehle in meinem Profilskript. Du kannst auch den Alias Key anstelle von Chord verwenden.


Set-PSReadLineKeyHandler -Function capitalizeword -Chord 'alt+c'
Set-PSReadLineKeyHandler -Function upcaseword -Chord 'alt+u'
Set-PSReadLineKeyHandler -Function downcaseword -Chord 'alt+l'

Ich kann ein Wort eingeben, den Cursor an den Anfang des Wortes setzen und eine der Tastenkombinationen verwenden.

Du solltest Get-PSReadLineKeyHandler | sort key | select key,function ausführen, um zu sehen, welche Tasten bereits definiert sind. Achte dabei auch auf Konflikte mit Windows-Terminals oder VS-Code.

Du kannst Key-Handler für so ziemlich alles definieren.


Set-PSReadLineKeyHandler -key "alt+n" -ScriptBlock {notepad}

Wenn man Alt+n auf der Konsole drückt, öffnet sich Notepad. Normalerweise werden die Key-Handler verwendet, um die aktuelle Zeile zu bearbeiten, aber du kannst auch kreativ werden.


Set-PSReadLineKeyHandler -key "alt+t" -ScriptBlock { Get-Date -Format "hh\:mm\:ss"|
Write-Host -ForegroundColor
Green}

Jetzt kann ich Alt+t drücken, um die aktuelle Zeit in grün in meiner Eingabeaufforderung anzuzeigen. Ich bin der erste, der zugibt, dass Key-Handler sehr kompliziert sein können.


Set-PSReadLineKeyHandler -key F6 -BriefDescription 'Function Menu' -Description "Display all functions as menu using Out-GridView. [$($env:username)]" -ScriptBlock {
$line = $null
$cursor = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)

#Die eingebauten Funktionen zum Wechseln von Laufwerken und ein paar andere herausfiltern
Get-ChildItem -Path function: |
Where-Object { $_.name -NotMatch '([A-Za-z]:)|(Get-Verb)|(prompt)|(cd)|(clearhost)|(more)|(pause)' } |
Select-Object Name, Version, Source, @{Name = 'Syntax'; Expression = { (GetCommand $_.name -Syntax | Out-String).Trim() } } |
Out-GridView -Title 'Function Menu: Select one to run' -OutputMode Single |
ForEach-Object { Show-Command -Name $_.name }
}

Dieser Key-Handler zeigt ein Menü mit allen Funktionen deiner Sitzung an. Wähle eine aus und drücke Enter. Die Funktion wird im Fenster Show-Command angezeigt. Nun kannst du die Funktion ausführen. Dies ist eine gute Möglichkeit, die Funktionen in deiner Sitzung zu erkunden. Wenn du nach 'PSReadLine key handlers' suchst, findest du viele Beispiele. Nimm die, die du ständig benutzen willst, in dein Profilskript auf. Fühle dich nicht verpflichtet, komplexe Key-Handler zu erstellen.

Natürlich findest du noch mehr dazu in der Microsoft documentation.

 

Probier es aus – und jetzt du!

Ich hoffe, ich habe dir fünf gute Gründe gegeben, PSReadLine zu benutzen, falls du es noch nicht getan hast. Wenn du es schon tust, hoffe ich, dass ich dir ein paar Ideen gegeben habe, wie du es noch effektiver nutzen kannst. PSReadLine ist ein leistungsstarkes Tool, das dich bei der Arbeit mit der PowerShell-Konsole produktiver macht. 

 

Good2know

Dein ultimatives PowerShell Cheat Sheet

Entfalte das volle Potential von PowerShell mit unserem praktischen Poster. Egal ob Anfänger oder erfahrener Profi, dieses Cheat Sheet ist darauf ausgelegt, dein Anlaufpunkt für die wichtigsten und am häufigsten verwendeten Cmdlets zu sein.

Das Poster gibt es als Download oder wir senden es dir kostenfrei per Post.

PowerShell Poster 2023

Hol dir hier dein Poster!

 

 

Weiterführende Links

Zusammenhängende Posts

9 min read

Scriptember 2024 – einen Monat lang feiern wir PowerShell und die begeisterten Menschen dahinter

Willkommen im Scriptember! Wir freuen uns, einen ganz besonderen Monat ankündigen zu können: Wir feiern einen Monat...

9 min read

Fünf Gründe für die Nutzung von PSReadLine

Wie gut bist du mit dem Thema vertraut? Vielleicht gibt dir dieser Artikel nur einen Überblick. Aus meiner Erfahrung in...

8 min read

PowerShell 7: Was spricht für, was gegen den Umstieg?

Windows PowerShell 5.1 ist in der Regel vorinstalliert und der Standard – lohnt sich ein Wechsel auf PowerShell 7, oder...

Über den Autor: