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. Es sind neuere Versionen verfügbar. Die aktuelle Version von PSReadLine kann auf 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:

  • Syntaxfarben der Befehlszeile
  • Visueller Hinweis auf Syntaxfehler
  • Eine bessere mehrzeilige Oberflä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 "Wort"-Verschiebung und -Löschung
  • Predictive IntelliSense
  • Dynamische Anzeige der Hilfe in der Konsole, ohne Ihren Platz in der Befehlszeile zu verlieren

PSReadLine erfordert PowerShell 5.1 oder höher. PSReadLine funktioniert mit dem Standardmäßigen Windows-Konsolenhost, Window 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 Sprachausgabeprogramm erkannt wird. Derzeit funktioniert PSReadLine nicht gut mit den Sprachausgaben. Das Standardrendering und die Formatierung 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 Vervollständigung von Registerkarten, die dem Benutzer bei der erfolgreichen Ausführung 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 weiter unten im PsReadLine-Releaseverlauf im Abschnitt "Hinweise ".

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)
  • Ändern von Verzeichnissen ohne Änderung der Befehlszeile

Der ScriptBlock empfängt zwei Argumente:

  • $key - Ein [ConsoleKeyInfo]- Objekt, das der Schlüssel ist, der die benutzerdefinierte Bindung ausgelöst hat. Wenn Sie den gleichen 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 handelt es sich dabei um 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, 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 befehlszeile, die Sie bereits eingegeben haben, 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 Tastenbindungen verwenden einige Hilfsfunktionen zum Bearbeiten der Befehlszeile. Diese APIs sind in about_PSReadLine_Functions dokumentiert.

Notizen

Befehlsverlauf

PSReadLine verwaltet eine Verlaufsdatei mit allen Befehlen und Daten, die Sie über die Befehlszeile eingegeben haben. Die Verlaufsdateien sind eine Datei namens $($host.Name)_history.txt. Auf Windows-Systemen wird die Verlaufsdatei unter $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLinegespeichert. Auf Nicht-Windows-Systemen werden die Verlaufsdateien unter $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.

  • password
  • asplaintext
  • token
  • apikey
  • secret

PSReadLine 2.2.0 verbessert die Filterung vertraulicher Daten auf folgende Weise:

  • 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.

PSReadLine-Releaseverlauf

Seit der Version, die in Windows PowerShell 5.1 enthalten ist, wurden viele Updates für PSReadLine durchgeführt.

  • PowerShell 7.3 ist im Lieferumfang von PSReadLine 2.2.6
  • PowerShell 7.2.5 im Lieferumfang von PSReadLine 2.1.0
  • PowerShell 7.0.11 im Lieferumfang von PSReadLine 2.0.4
  • PowerShell 5.1 ist im Lieferumfang von PSReadLine 2.0.0

Eine vollständige Liste der Änderungen finden Sie unter PSReadLine ChangeLog.

  • 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
  • PSReadLine 2.2.5

    Offizielles Wartungsrelease mit kleineren Fehlerbehebungen.

  • PSReadLine 2.2.2

    • PSReadLine hat zwei neue Vorhersagefeatures von IntelliSense hinzugefügt:
      • Der Parameter PredictionViewStyle wurde hinzugefügt, um die Auswahl des neuen ListViewzu ermöglichen.
      • Verbunden mit PSReadLine mit den CommandPrediction in PowerShell 7.2 eingeführten APIs, damit ein Benutzer ein Prädiktormodul importieren kann, das die Vorschläge aus einer benutzerdefinierten Quelle rendern kann.
    • Aktualisiert, um die Version 1.0.0 von Microsoft.PowerShell.Pager für dynamische Hilfe zu verwenden
    • Verbessertes Bereinigen vertraulicher Verlaufselemente
    • Viele Fehlerbehebungen und kleinere Verbesserungen
  • PSReadLine 2.1.0

    In diesem Release werden die folgenden Verbesserungen eingeführt, die seit version 2.0.4 hinzugefügt wurden:

    • Hinzufügen von Predictive IntelliSense-Vorschlägen aus dem Befehlsverlauf
    • Viele Fehlerbehebungen und API-Verbesserungen
  • PSReadLine 2.0.4

    In diesem Release werden die folgenden Verbesserungen eingeführt, die seit version 2.0.0 hinzugefügt wurden:

    • Der Parameter wurde hinzugefügt, um Get-PSReadLineKeyHandler die -Chord Suche nach bestimmten Schlüsselbindungen zu ermöglichen.

Feedback & , das zu PSReadLine beiträgt

PSReadLine auf GitHub

Sie können auf der GitHub-Seite keine Pull Request senden oder Feedback übermitteln.

Weitere Informationen