about_PSReadLine

Kort beskrivning

PSReadLine ger en förbättrad kommandoradsredigering i PowerShell-konsolen.

Lång beskrivning

PowerShell 7.4 levereras med PSReadLine 2.3.4. Den aktuella versionen är PSReadLine 2.3.4. Den aktuella versionen av PSReadLine kan installeras och användas i Windows PowerShell 5.1 och senare. För vissa funktioner måste du köra PowerShell 7.2 eller senare.

PSReadLine ger en kraftfull kommandoradsredigeringsupplevelse för PowerShell-konsolen. Den ger:

  • Syntaxfärgning för kommandoraden
  • En visuell indikation på syntaxfel
  • En bättre flerradsupplevelse (både redigering och historik)
  • Anpassningsbara nyckelbindningar
  • Cmd- och Emacs-lägen
  • Många konfigurationsalternativ
  • Slutförande av Bash-format (valfritt i cmd-läge, standard i Emacs-läge)
  • Emacs yank/kill-ring
  • PowerShell-tokenbaserad "ord"-förflyttning och borttagning
  • Förutsägande IntelliSense
  • Dynamisk visning av hjälp i konsolen utan att förlora din plats på kommandoraden

PSReadLine kräver PowerShell 5.1 eller senare. PSReadLine fungerar med standardvärden för Windows-konsolen, Windows-terminal och Visual Studio Code. Det fungerar inte i Windows PowerShell ISE.

PSReadLine kan installeras från PowerShell-galleriet. Om du vill installera PSReadLine i en version av PowerShell som stöds kör du följande kommando.

Install-Module -Name PSReadLine -AllowClobber -Force

Kommentar

Från och med PowerShell 7.0 hoppar PowerShell över automatisk inläsning av PSReadLine i Windows om ett skärmläsarprogram identifieras. PsReadLine fungerar för närvarande inte bra med skärmläsarna. Standardåtergivningen och formateringen av PowerShell 7.0 i Windows fungerar korrekt. Du kan läsa in modulen manuellt om det behövs.

Förutsägande IntelliSense

Predictive IntelliSense är ett tillägg till begreppet tabbavslut som hjälper användaren att slutföra kommandon. Det gör det möjligt för användare att identifiera, redigera och köra fullständiga kommandon baserat på matchande förutsägelser från användarens historik och ytterligare domänspecifika plugin-program.

Aktivera Predictive IntelliSense

Predictive IntelliSense är inaktiverat som standard. Om du vill aktivera förutsägelser kör du bara följande kommando:

Set-PSReadLineOption -PredictionSource History

Parametern PredictionSource kan också acceptera plugin-program för domänspecifika och anpassade krav.

Om du vill inaktivera Predictive IntelliSense kör du bara:

Set-PSReadLineOption -PredictionSource None

Kommentar

Predictive IntelliSense är aktiverat som standard i PSReadLine 2.2.6. Mer information finns i PSReadLine-versionshistorikeni avsnittet Anteckningar nedan.

Bindningar för anpassad nyckel

PSReadLine stöder anpassade nyckelbindningar med hjälp av cmdleten Set-PSReadLineKeyHandler . De flesta anpassade nyckelbindningar anropar en av de bindbara funktionerna, till exempel

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

Du kan binda en ScriptBlock till en nyckel. ScriptBlock kan göra i stort sett vad du vill. Några användbara exempel är

  • redigera kommandoraden
  • öppna ett nytt fönster (till exempel hjälp)
  • ändra kataloger utan att ändra kommandoraden

ScriptBlock tar emot två argument:

  • $key - Ett [ConsoleKeyInfo]- objekt som är nyckeln som utlöste den anpassade bindningen. Om du binder samma ScriptBlock till flera nycklar och behöver utföra olika åtgärder beroende på nyckeln kan du kontrollera $key. Många anpassade bindningar ignorerar det här argumentet.

  • $arg - Ett godtyckligt argument. Oftast är detta ett heltalsargument som användaren skickar från nyckelbindningarna DigitArgument. Om din bindning inte accepterar argument är det rimligt att ignorera det här argumentet.

Nu ska vi ta en titt på ett exempel som lägger till en kommandorad i historiken utan att köra den. Det här är användbart när du inser att du har glömt att göra något, men inte vill ange kommandoraden igen som du redan har angett.

$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

Du kan se många fler exempel i filen SamplePSReadLineProfile.ps1, som är installerad i mappen PSReadLine-modulen .

De flesta nyckelbindningar använder vissa hjälpfunktioner för att redigera kommandoraden. Dessa API:er dokumenteras i about_PSReadLine_Functions.

Kommentar

Kommandohistorik

PSReadLine har en historikfil som innehåller alla kommandon och data som du har angett från kommandoraden. Historikfilerna är en fil med namnet $($host.Name)_history.txt. I Windows-system lagras historikfilen på $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine. I andra system än Windows lagras historikfilerna på $env:XDG_DATA_HOME/powershell/PSReadLine eller $env:HOME/.local/share/powershell/PSReadLine.

Historiken kan innehålla känsliga data, inklusive lösenord. PSReadLine försöker filtrera bort känslig information. Alla kommandorader som innehåller följande strängar skrivs inte till historikfilen.

  • password
  • asplaintext
  • token
  • apikey
  • secret

PSReadLine 2.2.0 förbättrar filtreringen av känsliga data

  • Använder PowerShell Abstract Syntax Tree (AST) på den tolkade kommandoraden för att söka efter känsliga data.
  • Använder en lista över säkra cmdletar från SecretManagement-modulen för att tillåta att dessa kommandon läggs till i historiken. Listan över tillåtna innehåller:
    • Get-Secret
    • Get-SecretInfo
    • Get-SecretVault
    • Register-SecretVault
    • Remove-Secret
    • Set-SecretInfo
    • Set-SecretVaultDefault
    • Test-SecretVault
    • Unlock-SecretVault
    • Unregister-SecretVault

Följande kommandon kan till exempel skrivas till historikfilen:

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

Följande kommandon skrivs inte till historikfilen:

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

Om det finns andra kommandon som du inte vill skriva till historikfilerna kan du använda parametern AddToHistoryHandler för cmdleten Set-PSReadLineOption . Ett exempel på hur du använder AddToHistoryHandler finns i Exempel 7 på Set-PSReadLineOption.

PSReadLine 2.3.4 förbättrar filtreringen av känsliga data

Förbättrade standardrensningen för känslig historik för att tillåta att historiken innehåller säker egenskapsåtkomst.

När den känsliga strängen ingår i en egenskapsåtkomst:

  • Om den här medlemsåtkomståtgärden inte ingår i en tilldelning anser vi att den är säker
  • Annars, om den högra sidan är en pipeline eller en variabel, anser vi också att den är säker

Följande användningsfall anses till exempel vara säkra och kan sparas i historiken.

$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

Versionen förbättrade också rensningen av känslig historik så att token kunde hämtas med hjälp av kommandoradsverktygen az, gcloudoch kubectl .

Följande användningsfall anses till exempel vara säkra och kan sparas i historiken.

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-versionshistorik

Det har gjorts många uppdateringar av PSReadLine sedan den version som levereras i Windows PowerShell 5.1.

  • Aktuell version är PSReadLine 2.3.4
  • PowerShell 7.4 levereras med PSReadLine 2.3.4
  • PowerShell 7.3 levereras med PSReadLine 2.2.6
  • PowerShell 7.2 levereras med PSReadLine 2.1.0
  • PowerShell 7.0.11 levereras med PSReadLine 2.0.4
  • PowerShell 5.1 levereras med PSReadLine 2.0.0

En fullständig lista över ändringar finns i PSReadLine ChangeLog.

  • PSReadLine 2.3.4

Förutom flera felkorrigeringar innehåller den här versionen följande förbättringar:

  • Rullningsbar ListView för Predictive IntelliSense

    • Justerar storleken automatiskt baserat på terminalfönstrets storlek
    • Kan innehålla upp till 50 förutsägelseresultat
    • Dynamisk listrubrik som visar antalet resultat och den aktuella förutsägelsekällan
  • Förbättrad rensning av känslig historik för att tillåta hämtning av token från az, gcloudoch kubectl

  • Förbättra standardrensningen av känslig historik för att tillåta säker egenskapsåtkomst

  • Stöd har lagts till för uppskalning, nedskalning och versalisering av ord

  • Se till att tabbslutningen visar resultat vars ListItemText resultat endast skiljer sig från fall till fall

  • Stöder textobjektkommandot <d,i,w> i VI-redigeringsläget

  • Ändra standardfärgen för infogad förutsägelse till dim

  • Lägg till ett exempel i README för att transformera Unicode-kodpunkt till Unicode-tecken efter Alt+x

  • Lägg till alternativet TerminateOrphanedConsoleApps i Windows för att avsluta överblivna konsolanslutna processer som kan förstöra läsningen från konsolindata

  • PSReadLine 2.2.6

    I den här versionen är funktionen Predictive IntelliSense aktiverad som standard beroende på följande villkor:

    • Om virtuell terminal (VT) stöds och PSReadLine körs i PowerShell 7.2 eller senare är PredictionSource inställt på HistoryAndPlugin
    • Om VT stöds och PSReadLine körs i PowerShell före 7.2 är PredictionSource inställt på History
    • Om VT inte stöds är PredictionSource inställt på None
  • PSReadLine 2.2.5

    Officiell serviceversion med mindre felkorrigeringar.

  • PSReadLine 2.2.2

    • PSReadLine har lagt till två nya prediktiva IntelliSense-funktioner:
      • Parametern PredictionViewStyle har lagts till för att tillåta valet av den nya ListView.
      • Anslut PSReadLine till CommandPrediction API:er som introducerades i PowerShell 7.2 för att tillåta att en användare kan importera en förutsägelsemodul som kan återge förslagen från en anpassad källa.
    • Har uppdaterats för att använda 1.0.0-versionen av Microsoft.PowerShell.Pager för dynamisk hjälp
    • Förbättrade rensningen av känsliga historikobjekt
    • Många felkorrigeringar och mindre förbättringar
  • PSReadLine 2.1.0

    Den här versionen samlar in följande förbättringar som lagts till sedan 2.0.4-versionen:

    • Lägg till Förslag på förutsägande IntelliSense från kommandohistoriken
    • Många felkorrigeringar och API-förbättringar
  • PSReadLine 2.0.4

    Den här versionen samlar in följande förbättringar som lagts till sedan 2.0.0-versionen:

    • Parametern -Chord har lagts till för att Get-PSReadLineKeyHandler tillåta sökning efter specifika nyckelbindningar

Feedback och bidrag till PSReadLine

PSReadLine på GitHub

Skicka gärna en pull-begäran eller skicka feedback på GitHub-sidan.

Se även