about_PSReadLine

Korte beschrijving

PSReadLine biedt een verbeterde bewerkingservaring voor opdrachtregels in de PowerShell-console.

Lange beschrijving

PowerShell 7.4 wordt geleverd met PSReadLine 2.3.4. De huidige versie is PSReadLine 2.3.4. De huidige versie van PSReadLine kan worden geïnstalleerd en gebruikt in Windows PowerShell 5.1 en hoger. Voor sommige functies moet u PowerShell 7.2 of hoger uitvoeren.

PSReadLine biedt een krachtige opdrachtregelbewerking voor de PowerShell-console. Het biedt:

  • Syntaxiskleuring van de opdrachtregel
  • Een visuele indicatie van syntaxisfouten
  • Een betere ervaring met meerdere regels (zowel bewerken als geschiedenis)
  • Aanpasbare sleutelbindingen
  • Cmd- en Emacs-modi
  • Veel configuratieopties
  • Voltooiing van Bash-stijl (optioneel in cmd-modus, standaard in emacs-modus)
  • Emacs yank/kill-ring
  • PowerShell-token op basis van woordverplaatsing en -verwijdering
  • Voorspellende IntelliSense
  • Dynamische weergave van Help in de console zonder uw plaats op de opdrachtregel te verliezen

PSReadLine vereist PowerShell 5.1 of hoger. PSReadLine werkt met de standaard-Windows-consolehost, Windows Terminal en Visual Studio Code. Het werkt niet in windows PowerShell ISE.

PSReadLine kan worden geïnstalleerd vanuit de PowerShell Gallery. Voer de volgende opdracht uit om PSReadLine te installeren in een ondersteunde versie van PowerShell.

Install-Module -Name PSReadLine -AllowClobber -Force

Notitie

Vanaf PowerShell 7.0 slaat PowerShell het automatisch laden van PSReadLine in Windows over als er een schermlezerprogramma wordt gedetecteerd. Momenteel werkt PSReadLine niet goed met de schermlezers. De standaardweergave en -opmaak van PowerShell 7.0 in Windows werken goed. U kunt de module indien nodig handmatig laden.

Voorspellende IntelliSense

Predictive IntelliSense is een aanvulling op het concept van tabvoltooiing waarmee de gebruiker opdrachten kan voltooien. Hiermee kunnen gebruikers volledige opdrachten detecteren, bewerken en uitvoeren op basis van overeenkomende voorspellingen uit de geschiedenis van de gebruiker en aanvullende domeinspecifieke invoegtoepassingen.

Voorspellende IntelliSense inschakelen

Voorspellende IntelliSense is standaard uitgeschakeld. Voer de volgende opdracht uit om voorspellingen in te schakelen:

Set-PSReadLineOption -PredictionSource History

De parameter PredictionSource kan ook invoegtoepassingen accepteren voor domeinspecifieke en aangepaste vereisten.

Als u Predictive IntelliSense wilt uitschakelen, voert u het volgende uit:

Set-PSReadLineOption -PredictionSource None

Notitie

Voorspellende IntelliSense is standaard ingeschakeld in PSReadLine 2.2.6. Zie de releasegeschiedenis van PSReadLine in de sectie Opmerkingen hieronder voor meer informatie.

Aangepaste sleutelbindingen

PSReadLine ondersteunt aangepaste sleutelbindingen met behulp van de Set-PSReadLineKeyHandler cmdlet. De meeste aangepaste sleutelbindingen roepen een van de bindbare functies aan, bijvoorbeeld

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

U kunt een ScriptBlock aan een sleutel binden. De ScriptBlock kan vrijwel alles doen wat u wilt. Enkele nuttige voorbeelden zijn

  • de opdrachtregel bewerken
  • een nieuw venster openen (bijvoorbeeld Help)
  • mappen wijzigen zonder de opdrachtregel te wijzigen

ScriptBlock ontvangt twee argumenten:

  • $key - Een [ConsoleKeyInfo] -object dat de sleutel is die de aangepaste binding heeft geactiveerd. Als u dezelfde ScriptBlock verbindt met meerdere sleutels en verschillende acties moet uitvoeren, afhankelijk van de sleutel, kunt u dit controleren $key. Veel aangepaste bindingen negeren dit argument.

  • $arg - Een willekeurig argument. Meestal is dit een geheel getalargument dat de gebruiker doorgeeft uit de sleutelbindingen DigitArgument. Als uw binding geen argumenten accepteert, is het redelijk om dit argument te negeren.

Laten we eens kijken naar een voorbeeld waarmee een opdrachtregel aan de geschiedenis wordt toegevoegd zonder deze uit te voeren. Dit is handig wanneer u beseft dat u bent vergeten iets te doen, maar u niet opnieuw wilt invoeren van de opdrachtregel die u al hebt ingevoerd.

$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

U kunt nog veel meer voorbeelden zien in het bestand SamplePSReadLineProfile.ps1, dat is geïnstalleerd in de modulemap PSReadLine .

De meeste sleutelbindingen gebruiken enkele helperfuncties voor het bewerken van de opdrachtregel. Deze API's worden beschreven in about_PSReadLine_Functions.

Opmerkingen

Opdrachtgeschiedenis

PSReadLine onderhoudt een geschiedenisbestand met alle opdrachten en gegevens die u hebt ingevoerd vanaf de opdrachtregel. De geschiedenisbestanden zijn een bestand met de naam $($host.Name)_history.txt. Op Windows-systemen wordt het geschiedenisbestand opgeslagen op $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine. Op niet-Windows-systemen worden de geschiedenisbestanden opgeslagen op $env:XDG_DATA_HOME/powershell/PSReadLine of $env:HOME/.local/share/powershell/PSReadLine.

De geschiedenis kan gevoelige gegevens bevatten, inclusief wachtwoorden. PSReadLine probeert gevoelige informatie te filteren. Alle opdrachtregels met de volgende tekenreeksen worden niet naar het geschiedenisbestand geschreven.

  • password
  • asplaintext
  • token
  • apikey
  • secret

PSReadLine 2.2.0 verbetert het filteren van gevoelige gegevens

  • Maakt gebruik van de PowerShell Abstract Syntax Tree (AST) van de geparseerde opdrachtregel om te zoeken naar gevoelige gegevens.
  • Maakt gebruik van een acceptatielijst met veilige cmdlets uit de SecretManagement-module om toe te staan dat deze opdrachten aan de geschiedenis worden toegevoegd. De acceptatielijst bevat:
    • Get-Secret
    • Get-SecretInfo
    • Get-SecretVault
    • Register-SecretVault
    • Remove-Secret
    • Set-SecretInfo
    • Set-SecretVaultDefault
    • Test-SecretVault
    • Unlock-SecretVault
    • Unregister-SecretVault

De volgende opdrachten mogen bijvoorbeeld naar het geschiedenisbestand worden geschreven:

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

De volgende opdrachten worden niet naar het geschiedenisbestand geschreven:

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

Als er andere opdrachten zijn die u niet naar de geschiedenisbestanden wilt schrijven, kunt u de parameter AddToHistoryHandler van de Set-PSReadLineOption cmdlet gebruiken. Zie voorbeeld 7 van Set-PSReadLineOption voor een voorbeeld van het gebruik van AddToHistoryHandler.

PSReadLine 2.3.4 verbetert het filteren van gevoelige gegevens

Verbeterde standaard gevoelige geschiedenis wissen zodat de geschiedenis veilige toegang tot eigenschappen kan bevatten.

Wanneer de gevoelige tekenreeks deel uitmaakt van een eigenschapstoegang:

  • Als deze lidtoegangsbewerking geen deel uitmaakt van een toewijzing, wordt deze veilig beschouwd
  • Als de rechterkant een pijplijn of variabele is, wordt het ook veilig beschouwd als aan de rechterkant

De volgende gebruiksvoorbeelden worden bijvoorbeeld als veilig beschouwd en kunnen worden opgeslagen in de geschiedenis.

$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

De release heeft ook het wissen van gevoelige geschiedenis verbeterd om het ophalen van tokens met behulp van de azgcloud, en kubectl opdrachtregelprogramma's toe te staan.

De volgende gebruiksvoorbeelden worden bijvoorbeeld als veilig beschouwd en kunnen worden opgeslagen in de geschiedenis.

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

Releasegeschiedenis van PSReadLine

Er zijn veel updates voor PSReadLine sinds de versie die wordt geleverd in Windows PowerShell 5.1.

  • Huidige release is PSReadLine 2.3.4
  • PowerShell 7.4 wordt geleverd met PSReadLine 2.3.4
  • PowerShell 7.3 wordt geleverd met PSReadLine 2.2.6
  • PowerShell 7.2 wordt geleverd met PSReadLine 2.1.0
  • PowerShell 7.0.11 geleverd met PSReadLine 2.0.4
  • PowerShell 5.1 wordt geleverd met PSReadLine 2.0.0

Zie het PSReadLine ChangeLog voor een volledige lijst met wijzigingen.

  • PSReadLine 2.3.4

Naast verschillende bugfixes bevat deze release de volgende verbeteringen:

  • Scrollable ListView for Predictive IntelliSense

    • De grootte wordt automatisch aangepast op basis van de grootte van het terminalvenster
    • Kan maximaal 50 voorspellingsresultaten bevatten
    • Dynamische lijstkoptekst met het aantal resultaten en de huidige voorspellingsbron
  • Verbeterde gevoelige geschiedenis wissen om het ophalen van token van az, gclouden kubectl

  • De standaard gevoelige geschiedenis wissen verbeteren om veilige toegang tot eigenschappen toe te staan

  • Ondersteuning toegevoegd voor het upcasings-, downcasing- en hoofdlettergebruik van woorden

  • Tabvoltooiing weergeven resultaten waarvan ListItemText de verschillen alleen per hoofdletter zijn

  • Ondersteunt de opdracht <d,i,w> tekstobject in de VI-bewerkingsmodus

  • De standaardkleur voor inlinevoorspelling wijzigen in dim

  • Voeg een voorbeeld toe aan README voor het transformeren van Unicode-codepunt naar Unicode-teken door Alt+x

  • Voeg de optie TerminateOrphanedConsoleApps in Windows toe om zwevend console-gekoppeld proces te beëindigen dat het lezen van console-invoer kan verpesten

  • PSReadLine 2.2.6

    In deze release is de functie Predictive IntelliSense standaard ingeschakeld, afhankelijk van de volgende voorwaarden:

    • Als Virtual Terminal (VT) wordt ondersteund en PSReadLine wordt uitgevoerd in PowerShell 7.2 of hoger, is PredictionSource ingesteld op HistoryAndPlugin
    • Als VT wordt ondersteund en PSReadLine wordt uitgevoerd in PowerShell vóór 7.2, is PredictionSource ingesteld op History
    • Als VT niet wordt ondersteund, wordt PredictionSource ingesteld op None
  • PSReadLine 2.2.5

    Officiële onderhoudsrelease met kleine bugfixes.

  • PSReadLine 2.2.2

    • PSReadLine heeft twee nieuwe voorspellende IntelliSense-functies toegevoegd:
      • De parameter PredictionViewStyle toegevoegd om de selectie van het nieuwe ListViewtoe te staan.
      • Verbinding maken ed PSReadLine naar de CommandPrediction API's die zijn geïntroduceerd in PowerShell 7.2, zodat een gebruiker een predictormodule kan importeren waarmee de suggesties uit een aangepaste bron kunnen worden weergegeven.
    • Bijgewerkt voor gebruik van de versie 1.0.0 van Microsoft.PowerShell.Pager voor dynamische help
    • Het verwijderen van gevoelige geschiedenisitems verbeterd
    • Veel bugfixes en kleinere verbeteringen
  • PSReadLine 2.1.0

    Deze release bevat de volgende verbeteringen die zijn toegevoegd sinds de 2.0.4-release:

    • Predictive IntelliSense-suggesties toevoegen uit de opdrachtgeschiedenis
    • Veel bugfixes en API-verbeteringen
  • PSReadLine 2.0.4

    Deze release bevat de volgende verbeteringen die zijn toegevoegd sinds de release 2.0.0:

    • -Chord De parameter toegevoegd om het zoeken naar specifieke sleutelbindingen toe te Get-PSReadLineKeyHandler staan

Feedback en bijdragen aan PSReadLine

PSReadLine op GitHub

U kunt gerust een pull-aanvraag indienen of feedback verzenden op de GitHub-pagina.

Zie ook

  • PSReadLine wordt sterk beïnvloed door de GNU-leeslijnbibliotheek.