about_PSReadLine
Kurze Beschreibung
PSReadLine bietet eine verbesserte Befehlszeilenbearbeitung in der PowerShell-Konsole.
Lange Beschreibung
PowerShell 7.3 wird mit PSReadLine 2.2.6 ausgeliefert. Die aktuelle Version ist PSReadLine 2.3.4. Die aktuelle Version von PSReadLine kann auf Windows PowerShell 5.1 und höher installiert und verwendet werden. Für einige Features muss PowerShell 7.2 oder höher ausgeführt werden.
PSReadLine bietet eine leistungsstarke Befehlszeilenbearbeitung für die PowerShell-Konsole. Sie bietet:
- Syntaxfarbe der Befehlszeile
- Visueller Hinweis auf Syntaxfehler
- Eine bessere mehrzeilige Benutzeroberfläche (sowohl Bearbeitung als auch Verlauf)
- Anpassbare Schlüsselbindungen
- Cmd- und Emacs-Modi
- Viele Konfigurationsoptionen
- Bash-Stilvervollständigung (optional im Cmd-Modus, Standard im Emacs-Modus)
- Emacs Yank/Kill-Ring
- PowerShell-tokenbasierte "Wortverschiebung" und -Löschung
- Predictive IntelliSense
- Dynamische Anzeige der Hilfe in der Konsole ohne Verlust ihres Platzes in der Befehlszeile
PSReadLine erfordert PowerShell 5.1 oder höher. PSReadLine funktioniert mit dem Standardmäßigen Windows-Konsolenhost, Windows-Terminal und Visual Studio Code. Es funktioniert nicht in der Windows PowerShell ISE.
PSReadLine kann über die PowerShell-Katalog installiert werden. Führen Sie den folgenden Befehl aus, um PSReadLine in einer unterstützten Version von PowerShell zu installieren.
Install-Module -Name PSReadLine -AllowClobber -Force
Hinweis
Ab PowerShell 7.0 überspringt PowerShell das automatische Laden von PSReadLine unter Windows, wenn ein Sprachsprachprogramm erkannt wird. Derzeit funktioniert PSReadLine nicht gut mit der Sprachausgabe. Das Standardrendering und die Standardformatierung von PowerShell 7.0 unter Windows funktionieren ordnungsgemäß. Sie können das Modul bei Bedarf manuell laden.
Predictive IntelliSense
Predictive IntelliSense ist eine Ergänzung zum Konzept der Registerkarten-Vervollständigung, die dem Benutzer beim erfolgreichen Abschließen von Befehlen hilft. Es ermöglicht Benutzern, vollständige Befehle basierend auf übereinstimmenden Vorhersagen aus dem Verlauf des Benutzers und zusätzlichen domänenspezifischen Plug-Ins zu ermitteln, zu bearbeiten und auszuführen.
Aktivieren von Predictive IntelliSense
Predictive IntelliSense ist standardmäßig deaktiviert. Führen Sie einfach den folgenden Befehl aus, um Vorhersagen zu aktivieren:
Set-PSReadLineOption -PredictionSource History
Der Parameter PredictionSource kann auch Plug-Ins für domänenspezifische und benutzerdefinierte Anforderungen akzeptieren.
Führen Sie einfach Folgendes aus, um Predictive IntelliSense zu deaktivieren:
Set-PSReadLineOption -PredictionSource None
Hinweis
Predictive IntelliSense ist in PSReadLine 2.2.6 standardmäßig aktiviert. Weitere Informationen finden Sie im PsReadLine-Releaseverlauf im Abschnitt Notizen unten.
Benutzerdefinierte Schlüsselbindungen
PSReadLine unterstützt benutzerdefinierte Schlüsselbindungen mithilfe des Set-PSReadLineKeyHandler
Cmdlets. Die meisten benutzerdefinierten Schlüsselbindungen rufen eine der bindbaren Funktionen auf, z. B.
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Sie können einen ScriptBlock an einen Schlüssel binden. Der ScriptBlock kann so ziemlich alles tun, was Sie möchten. Einige nützliche Beispiele sind:
- Bearbeiten der Befehlszeile
- Öffnen eines neuen Fensters (z. B. Hilfe)
- Verzeichnisse ändern, ohne die Befehlszeile zu ändern
Der ScriptBlock empfängt zwei Argumente:
$key
– Ein [ConsoleKeyInfo]- Objekt, das der Schlüssel ist, der die benutzerdefinierte Bindung ausgelöst hat. Wenn Sie denselben ScriptBlock an mehrere Schlüssel binden und je nach Schlüssel unterschiedliche Aktionen ausführen müssen, können Sie überprüfen$key
. Viele benutzerdefinierte Bindungen ignorieren dieses Argument.$arg
– Ein beliebiges Argument. In den meisten Fällen ist dies ein ganzzahliges Argument, das der Benutzer von den Schlüsselbindungen DigitArgument übergibt. Wenn Ihre Bindung keine Argumente akzeptiert, ist es sinnvoll, dieses Argument zu ignorieren.
Sehen wir uns ein Beispiel an, das dem Verlauf eine Befehlszeile hinzufügt, ohne sie auszuführen. Dies ist nützlich, wenn Sie feststellen, dass Sie etwas vergessen haben, aber die bereits eingegebene Befehlszeile nicht erneut eingeben möchten.
$parameters = @{
Key = 'Alt+w'
BriefDescription = 'SaveInHistory'
LongDescription = 'Save current line in history but do not execute'
ScriptBlock = {
param($key, $arg) # The arguments are ignored in this example
# GetBufferState gives us the command line (with the cursor position)
$line = $null
$cursor = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line,
[ref]$cursor)
# AddToHistory saves the line in history, but does not execute it.
[Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory($line)
# RevertLine is like pressing Escape.
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
}
}
Set-PSReadLineKeyHandler @parameters
Viele weitere Beispiele finden Sie in der Datei SamplePSReadLineProfile.ps1
, die im PSReadLine-Modulordner installiert ist.
Die meisten Schlüsselbindungen verwenden einige Hilfsfunktionen zum Bearbeiten der Befehlszeile. Diese APIs sind in about_PSReadLine_Functions dokumentiert.
Hinweise
Befehlsverlauf
PSReadLine verwaltet eine Verlaufsdatei, die alle Befehle und Daten enthält, die Sie über die Befehlszeile eingegeben haben. Die Verlaufsdateien sind eine Datei mit dem Namen $($host.Name)_history.txt
. Auf Windows-Systemen wird die Verlaufsdatei unter $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
gespeichert. Auf Nicht-Windows-Systemen werden die Verlaufsdateien unter $env:XDG_DATA_HOME/powershell/PSReadLine
oder $env:HOME/.local/share/powershell/PSReadLine
gespeichert.
Der Verlauf kann vertrauliche Daten einschließlich Kennwörtern enthalten. PSReadLine versucht, vertrauliche Informationen herauszufiltern. Alle Befehlszeilen, die die folgenden Zeichenfolgen enthalten, werden nicht in die Verlaufsdatei geschrieben.
password
asplaintext
token
apikey
secret
PSReadLine 2.2.0 verbessert die Filterung vertraulicher Daten
- Verwendet die PowerShell Abstract Syntax Tree (AST) der analysierten Befehlszeile, um nach vertraulichen Daten zu suchen.
- Verwendet eine Zulassungsliste mit sicheren Cmdlets aus dem SecretManagement-Modul , damit diese Befehle dem Verlauf hinzugefügt werden können. Die Zulassungsliste enthält Folgendes:
Get-Secret
Get-SecretInfo
Get-SecretVault
Register-SecretVault
Remove-Secret
Set-SecretInfo
Set-SecretVaultDefault
Test-SecretVault
Unlock-SecretVault
Unregister-SecretVault
Beispielsweise dürfen die folgenden Befehle in die Verlaufsdatei geschrieben werden:
Get-Secret PSGalleryApiKey -AsPlainText # Get-Secret is in the allowlist
$token = Get-Secret -Name github-token -Vault MySecret
[MyType]::CallRestAPI($token, $url, $args)
$template -f $token
Die folgenden Befehle werden nicht in die Verlaufsdatei geschrieben:
$token = 'abcd' # Assign expr-value to sensitive variable name.
Set-Secret abc $mySecret # Set-Secret is not in the allowlist.
ConvertTo-SecureString stringValue -AsPlainText # '-AsPlainText' is an alert.
Invoke-WebRequest -Token xxx # Expr-value as argument to '-Token'.
Get-ResultFromTwo -Secret1 (Get-Secret -Name blah -AsPlainText) -Secret2 sdv87ysdfayf798hfasd8f7ha # '-Secret2' has expr-value argument.
Wenn es andere Befehle gibt, die Sie nicht in die Verlaufsdateien schreiben möchten, können Sie den AddToHistoryHandler-Parameter des Set-PSReadLineOption
Cmdlets verwenden. Ein Beispiel für die Verwendung von AddToHistoryHandler finden Sie unter Beispiel 7 von Set-PSReadLineOption.
PSReadLine 2.3.4 verbessert die Filterung vertraulicher Daten
Die standardmäßige Bereinigung vertraulicher Verlaufsdaten wurde verbessert, sodass der Verlauf einen sicheren Eigenschaftszugriff enthält.
Wenn die vertrauliche Zeichenfolge Teil einer Eigenschaft ist, greifen Sie auf Folgendes zu:
- Wenn dieser Memberzugriffsvorgang nicht Teil einer Zuweisung ist, halten wir ihn für sicher.
- Andernfalls gilt die rechte Seite als sicher, wenn es sich bei der rechten Seite um eine Pipeline oder eine Variable handelt.
Die folgenden Anwendungsfälle gelten beispielsweise als sicher und können im Verlauf gespeichert werden.
$a.Secret = Get-Secret -Name github-token -Vault MySecret
$a.Secret = $secret
$a.Password.Secret | Set-Value
$token = (Get-AzAccessToken -ResourceUrl 'https://app.contoso.com').Token
Die Version hat auch die Vertraulichkeitsverlaufsbereinigung verbessert, um das Abrufen von Token mithilfe der az
Befehlszeilentools , gcloud
und kubectl
zu ermöglichen.
Die folgenden Anwendungsfälle gelten beispielsweise als sicher und können im Verlauf gespeichert werden.
kubectl get secrets
kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
kubectl describe secret db-user-pass
az account get-access-token --resource=https://app.contoso.com --query accessToken --output tsv
$env:PGPASS = gcloud auth print-access-token
PSReadLine-Releaseverlauf
Seit der Version, die in Windows PowerShell 5.1 ausgeliefert wird, wurden viele Updates für PSReadLine durchgeführt.
- Aktuelle Version ist PSReadLine 2.3.4.
- PowerShell 7.4 wird mit PSReadLine 2.3.4 ausgeliefert
- PowerShell 7.3 wird mit PSReadLine 2.2.6 ausgeliefert
- PowerShell 7.2 wird mit PSReadLine 2.1.0 ausgeliefert
- PowerShell 7.0.11 im Lieferumfang von PSReadLine 2.0.4
- PowerShell 5.1 wird mit PSReadLine 2.0.0 ausgeliefert
Eine vollständige Liste der Änderungen finden Sie im PSReadLine ChangeLog.
- PSReadLine 2.3.4
Zusätzlich zu mehreren Fehlerbehebungen enthält dieses Release die folgenden Verbesserungen:
Scrollbare ListView für Predictive IntelliSense
- Automatisches Anpassen der Größe basierend auf der Größe des Terminalfensters
- Kann bis zu 50 Vorhersageergebnisse enthalten
- Dynamischer Listenheader, der die Anzahl der Ergebnisse und die aktuelle Vorhersagequelle anzeigt
Verbessertes Bereinigen vertraulicher Verlaufsdaten, um das Abrufen von Token aus
az
,gcloud
und zu ermöglichenkubectl
Verbessern der standardmäßigen Bereinigung vertraulicher Verlaufsdaten, um den sicheren Zugriff auf Eigenschaften zu ermöglichen
Unterstützung für Upcasing, Downcasing und Groß-/Kleinschreibung von Wörtern hinzugefügt
Anzeigen von Ergebnissen, die sich
ListItemText
nur nach Groß-/Kleinschreibung unterscheidenUnterstützt den Text-Objekt-Befehl
<d,i,w>
im VI-Bearbeitungsmodus.Ändern der Standardfarbe für die Inlinevorhersage in Dim
Hinzufügen eines Beispiels zur INFODATEI zum Transformieren von Unicode-Codepunkten in Unicode-Zeichen nach
Alt+x
Fügen Sie die Option TerminateOrphanedConsoleApps unter Windows hinzu, um verwaiste, konsolenseitig angefügte Prozesse zu beenden, die das Lesen von Konsoleneingaben beeinträchtigen können.
PSReadLine 2.2.6
In dieser Version ist das Feature Predictive IntelliSense standardmäßig aktiviert, abhängig von den folgenden Bedingungen:
- Wenn virtual Terminal (VT) unterstützt wird und PSReadLine in PowerShell 7.2 oder höher ausgeführt wird, wird PredictionSource auf
HistoryAndPlugin
gestellt. - Wenn VT unterstützt wird und PSReadLine in PowerShell vor Version 7.2 ausgeführt wird, ist PredictionSource auf festgelegt.
History
- Wenn VT nicht unterstützt wird, ist PredictionSource auf festgelegt.
None
- Wenn virtual Terminal (VT) unterstützt wird und PSReadLine in PowerShell 7.2 oder höher ausgeführt wird, wird PredictionSource auf
PSReadLine 2.2.5
Offizielles Wartungsrelease mit kleineren Fehlerbehebungen.
PSReadLine 2.2.2
- PSReadLine hat zwei neue Vorhersagefeatures für IntelliSense hinzugefügt:
- Der Parameter PredictionViewStyle wurde hinzugefügt, um die Auswahl des neuen
ListView
zu ermöglichen. - PsReadLine wurde mit den
CommandPrediction
in PowerShell 7.2 eingeführten APIs verbunden, damit ein Benutzer ein Vorhersagemodul importieren kann, das die Vorschläge aus einer benutzerdefinierten Quelle rendern kann.
- Der Parameter PredictionViewStyle wurde hinzugefügt, um die Auswahl des neuen
- Aktualisiert, um die Version 1.0.0 von
Microsoft.PowerShell.Pager
für dynamische Hilfe zu verwenden - Verbessertes Bereinen vertraulicher Verlaufselemente
- Viele Fehlerbehebungen und kleinere Verbesserungen
- PSReadLine hat zwei neue Vorhersagefeatures für IntelliSense hinzugefügt:
PSReadLine 2.1.0
In diesem Release werden die folgenden Verbesserungen eingeführt, die seit Release 2.0.4 hinzugefügt wurden:
- Hinzufügen von Predictive IntelliSense-Vorschlägen aus dem Befehlsverlauf
- Viele Fehlerbehebungen und API-Erweiterungen
PSReadLine 2.0.4
Dieses Release führt ein Rollup der folgenden Verbesserungen aus, die seit release 2.0.0 hinzugefügt wurden:
- Parameter hinzugefügt, um die
-Chord
Suche nach bestimmten Schlüsselbindungen zuGet-PSReadLineKeyHandler
zu ermöglichen
- Parameter hinzugefügt, um die
Feedback & Beiträge zu PSReadLine
Sie können einen Pull Request senden oder Feedback auf der GitHub-Seite übermitteln.
Weitere Informationen
- PSReadLine wird stark von der GNU-Leselinienbibliothek beeinflusst.