Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Kurzbeschreibung
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 unter Windows PowerShell 5.1 und höher installiert und verwendet werden. Für einige Features müssen Sie PowerShell 7.2 oder höher ausführen.
PSReadLine bietet eine leistungsstarke Befehlszeilenbearbeitung für die PowerShell-Konsole. Sie bietet:
- Syntaxfarbe der Befehlszeile
- Ein visueller Hinweis auf Syntaxfehler
- Eine bessere mehrzeilige Erfahrung (sowohl Bearbeiten als auch Verlauf)
- Anpassbare Tastenbindungen
- Cmd- und Emacs-Modi
- Viele Konfigurationsoptionen
- Abschluss der Bash-Formatvorlage (optional im Cmd-Modus, Standard im Emacs-Modus)
- Emacs reißen/töten Ring
- PowerShell-Tokenbasierte "Wort"-Bewegung und -Löschung
- Prädiktives IntelliSense
- Dynamische Anzeige der Hilfe in der Konsole, ohne ihre Position in der Befehlszeile zu verlieren
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 aus dem 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 Sprachausgabeprogramm erkannt wird. Derzeit funktioniert PSReadLine nicht gut mit den Bildschirmleseprogrammen. Das standardmäßige Rendering und die Formatierung von PowerShell 7.0 unter Windows funktioniert ordnungsgemäß. Sie können das Modul bei Bedarf manuell laden.
Prädiktives IntelliSense
Predictive IntelliSense ist eine Ergänzung zum Konzept des Abschlusses der Registerkarte, die den Benutzer bei der erfolgreichen Durchführung von Befehlen unterstützt. 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.
Predictive IntelliSense aktivieren
Predictive IntelliSense ist standardmäßig deaktiviert. Um Vorhersagen zu aktivieren, führen Sie einfach den folgenden Befehl aus:
Set-PSReadLineOption -PredictionSource History
Der parameter PredictionSource kann auch Plug-Ins für domänenspezifische und benutzerdefinierte Anforderungen akzeptieren.
Um Predictive IntelliSense zu deaktivieren, führen Sie einfach Folgendes aus:
Set-PSReadLineOption -PredictionSource None
Hinweis
Predictive IntelliSense ist in PSReadLine 2.2.6 standardmäßig aktiviert. Weitere Informationen finden Sie in der PSReadLine-Versionshistorie im Abschnitt "Hinweise " weiter unten.
Benutzerdefinierte Schlüsselbindungen
PSReadLine unterstützt benutzerdefinierte Schlüsselbindungen mithilfe des cmdlets Set-PSReadLineKeyHandler. Die meisten benutzerdefinierten Tastenbindungen rufen eine der bindbaren Funktionenauf, z. B.
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Sie können ein ScriptBlock an einen Schlüssel binden. Der ScriptBlock kann ziemlich alles tun, was Sie wollen. Einige nützliche Beispiele sind:
- Bearbeiten der Befehlszeile
- Öffnen eines neuen Fensters (z. B. Hilfe)
- Verzeichnisse ändern, ohne die Befehlszeile zu ändern
ScriptBlock empfängt zwei Argumente:
$key– Ein [ConsoleKeyInfo] Objekt, das den Schlüssel darstellt, 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$keyüberprüfen. Viele benutzerdefinierte Bindungen ignorieren dieses Argument.$arg- Ein beliebiges Argument. Meistens wäre dies ein ganzzahliges Argument, das der Benutzer aus den Schlüsselbindungen DigitArgument übergibt. Wenn Ihre Bindung keine Argumente akzeptiert, ist es sinnvoll, dieses Argument zu ignorieren.
Sehen wir uns ein Beispiel an, in dem dem Verlauf eine Befehlszeile hinzugefügt wird, ohne sie auszuführen. Dies ist nützlich, wenn Sie feststellen, dass Sie etwas vergessen haben, aber nicht erneut die Befehlszeile eingeben möchten, die Sie bereits eingegeben haben.
$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
Weitere Beispiele finden Sie in der Datei SamplePSReadLineProfile.ps1, die im PSReadLine- Modulordner installiert ist.
Die meisten Tastenbindungen verwenden einige Hilfsfunktionen zum Bearbeiten der Befehlszeile. Diese APIs sind in about_PSReadLine_Functionsdokumentiert.
Hinweise
Befehlsverlauf
PSReadLine verwaltet eine Verlaufsdatei mit allen Befehlen und Daten, 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 bei $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLinegespeichert. Auf Nicht-Windows-Systemen werden die Verlaufsdateien auf $env:XDG_DATA_HOME/powershell/PSReadLine oder $env:HOME/.local/share/powershell/PSReadLinegespeichert.
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.
passwordasplaintexttokenapikeysecret
PSReadLine 2.2.0 verbessert die Filterung vertraulicher Daten
- Verwendet die abstrakte PowerShell-Syntaxstruktur (AST) der analysierten Befehlszeile, um nach vertraulichen Daten zu suchen.
- Verwendet eine Zulassungsliste sicherer Cmdlets aus dem SecretManagement Modul, um zuzulassen, dass diese Befehle dem Verlauf hinzugefügt werden können. Die Zulassungsliste enthält:
Get-SecretGet-SecretInfoGet-SecretVaultRegister-SecretVaultRemove-SecretSet-SecretInfoSet-SecretVaultDefaultTest-SecretVaultUnlock-SecretVaultUnregister-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 Cmdlets Set-PSReadLineOption verwenden. Ein Beispiel für die Verwendung AddToHistoryHandler-finden Sie unter Beispiel 7 von Set-PSReadLineOption-.
PSReadLine 2.3.4 verbessert die Filterung vertraulicher Daten.
Das Standardmäßige Berbern vertraulicher Historien wurde verbessert, um dem Verlauf den Zugriff auf sichere Eigenschaften zu ermöglichen.
Wenn die vertrauliche Zeichenfolge Teil eines Eigenschaftenzugriffs ist:
- Wenn dieser Mitgliedszugriffsvorgang nicht Teil einer Aufgabe ist, betrachten wir ihn als sicher.
- Andernfalls gilt folgendes: Wenn es sich bei der rechten Seite um eine Pipeline oder eine Variable handelt, sollten wir sie auch als sicher betrachten.
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 verbesserte auch das Berbern des vertraulichen Verlaufs, um das Abrufen von Token mithilfe der Befehlszeilentools az, gcloudund 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-Versionsverlauf
Es gibt viele Updates für PSReadLine seit der Version, die in Windows PowerShell 5.1 enthalten ist.
- 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 diese Version 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
- Dynamische Listenkopfzeile mit der Anzahl der Ergebnisse und der aktuellen Vorhersagequelle
Verbessertes vertrauliches Scrubbing der Historie, um die Möglichkeit zu bieten, Token aus
az,gcloudundkubectlabzurufen.Verbesserung des standardmäßigen Scrubbing der vertraulichen Historie, um sicheren Zugriff auf Eigenschaften zuzulassen
Unterstützung für die Groß- und Kleinschreibung von Wörtern hinzugefügt
Die Registerkartenvervollständigung zeigt jetzt nur noch Ergebnisse an, deren
ListItemTextsich durch Groß- und Kleinschreibung unterscheiden.Unterstützt den Textobjektbefehl
<d,i,w>im VI-BearbeitungsmodusÄndern Sie die Standardfarbe für Vorhersagen in der Zeile auf dim
Hinzufügen eines Beispiels zu README zum Transformieren von Unicode-Codepunkten in Unicode-Zeichen durch
Alt+xFügen Sie die Option TerminateOrphanedConsoleApps unter Windows hinzu, um verwaiste Prozesse zu beenden, die an die Konsole angehängt sind und das Lesen von der Konsoleneingabe durcheinander bringen können
PSReadLine 2.2.6
In dieser Version ist das Predictive IntelliSense-Feature standardmäßig abhängig von den folgenden Bedingungen aktiviert:
- Wenn virtuelles Terminal (VT) unterstützt wird und PSReadLine in PowerShell 7.2 oder höher ausgeführt wird, wird PredictionSource auf
HistoryAndPlugingesetzt. - Wenn VT unterstützt wird und PSReadLine unter PowerShell vor Version 7.2 ausgeführt wird, wird PredictionSource auf
Historygesetzt. - Wenn VT nicht unterstützt wird, wird PredictionSource auf
Nonegesetzt.
- Wenn virtuelles Terminal (VT) unterstützt wird und PSReadLine in PowerShell 7.2 oder höher ausgeführt wird, wird PredictionSource auf
PSReadLine 2.2.5
Offizielle Wartungsversion mit kleineren Fehlerbehebungen.
PSReadLine 2.2.2
- PSReadLine hat zwei neue Predictive IntelliSense-Features hinzugefügt:
- Der parameter PredictionViewStyle wurde hinzugefügt, um die Auswahl des neuen
ListViewzu ermöglichen. - PSReadLine wurde mit den in PowerShell 7.2 eingeführten
CommandPrediction-APIs verbunden, damit Benutzer ein Prädiktormodul importieren können, das Vorschläge aus einer benutzerdefinierten Quelle rendert.
- Der parameter PredictionViewStyle wurde hinzugefügt, um die Auswahl des neuen
- Aktualisiert, um die Version 1.0.0 von
Microsoft.PowerShell.Pagerfür dynamische Hilfe zu verwenden - Verbessertes Scrubbing vertraulicher Einträge in der Historie
- Viele Fehlerkorrekturen und kleinere Verbesserungen
- PSReadLine hat zwei neue Predictive IntelliSense-Features hinzugefügt:
PSReadLine 2.1.0
Diese Version fasst die folgenden seit der Version 2.0.4 hinzugefügten Verbesserungen zusammen:
- Hinzufügen von Predictive IntelliSense-Vorschlägen aus dem Befehlsverlauf
- Viele Fehlerbehebungen und API-Verbesserungen
PSReadLine 2.0.4
In dieser Version werden die folgenden Verbesserungen zusammengefasst, die seit Version 2.0.0 hinzugefügt wurden:
- Der
-ChordParameter wurde hinzugefügtGet-PSReadLineKeyHandler, um die Suche nach bestimmten Tastenbelegungen zu ermöglichen
- Der
Feedback & Beitrag zu PSReadLine
Sie können eine Pull-Anforderung senden oder Feedback auf der GitHub-Seite senden.
Siehe auch
- PSReadLine wird stark von der GNU Readline Bibliothek beeinflusst.