about_PSReadLine
Kort beskrivning
PSReadLine ger en förbättrad kommandoradsredigering i PowerShell-konsolen.
Det har gjorts många uppdateringar av PSReadLine sedan den version som levereras i Windows PowerShell 5.1.
- v2.3.5 levereras först i PowerShell 7.4.2 och 7.5.0-preview.3
- v2.3.4 levereras först i PowerShell 7.4.0-rc.1
- v2.2.6 levereras först i PowerShell 7.3.0
- v2.1.0 levereras först i PowerShell 7.2.5
- v2.0.4 levereras först i PowerShell 7.0.11
- v2.0.0 levereras i Windows PowerShell 5.1
Mer information om versionsskillnader finns i about_PSReadLine_Release_Notes.
Lång beskrivning
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
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
, gcloud
och 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
Feedback och bidrag till PSReadLine
Skicka gärna en pull-begäran eller skicka feedback på GitHub-sidan.
Se även
- PSReadLine påverkas starkt av GNU :s läslinjebibliotek .