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...
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.
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.
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.
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
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.
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.
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.
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.
Aug 16, 2024 by Heiko Brenn
Willkommen im Scriptember! Wir freuen uns, einen ganz besonderen Monat ankündigen zu können: Wir feiern einen Monat...
Aug 14, 2024 by Jeffery Hicks
Wie gut bist du mit dem Thema vertraut? Vielleicht gibt dir dieser Artikel nur einen Überblick. Aus meiner Erfahrung in...
Jun 28, 2024 by Philip Lorenz
Windows PowerShell 5.1 ist in der Regel vorinstalliert und der Standard – lohnt sich ein Wechsel auf PowerShell 7, oder...
Jeffery Hicks ist ein IT-Veteran mit fast 35 Jahren Erfahrung, davon die meiste Zeit als IT-Infrastrukturberater, spezialisiert auf Microsoft-Servertechnologien mit Schwerpunkt Automatisierung und Effizienz. Er ist mehrfacher Gewinner des Microsoft MVP Awards. Jeff ist ein angesehener und bekannter Autor, Dozent und Berater. In den letzten 20 Jahren hat Jeff PowerShell-Inhalte und die Vorteile der Automatisierung für IT-Profis auf der ganzen Welt gelehrt und präsentiert. Jeff ist Autor bei Pluralsight und tritt häufig als Redner bei Technologiekonferenzen und Anwendergruppen auf. Bleib auf dem Laufenden mit Jeff unter https://jdhitsolutions.github.io