about_PSReadLine
Short Description
PSReadLine poskytuje vylepšené prostředí pro úpravy příkazového řádku v konzole PowerShellu.
Dlouhý popis
PowerShell 5.1 se dodává s PSReadLine 2.0.0. Aktuální verze je PSReadLine 2.3.4. Aktuální verzi PSReadLine je možné nainstalovat a používat v prostředí Windows PowerShell 5.1 a novějším. U některých funkcí musíte používat PowerShell 7.2 nebo vyšší.
PSReadLine poskytuje výkonné prostředí pro úpravy příkazového řádku pro konzolu PowerShellu. Poskytuje:
- Obarvení syntaxe příkazového řádku
- Vizuální indikace chyb syntaxe
- Lepší víceřádkové prostředí (úpravy i historie)
- Přizpůsobitelné vazby klíčů
- Režimy Cmd a Emacs
- Mnoho možností konfigurace
- Dokončování stylu Bash (volitelné v režimu Cmd, výchozí nastavení v režimu Emacs)
- Emacs yank /kill-ring
- Přesun a odstranění textu založeného na tokenu PowerShellu
PSReadLine vyžaduje PowerShell 5.1 nebo novější. PSReadLine funguje s výchozím hostitelem konzoly Systému Windows, Terminál Windows a editorem Visual Studio Code. V prostředí Windows PowerShell ISE nefunguje.
PsReadLine lze nainstalovat z Galerie prostředí PowerShell. Pokud chcete nainstalovat PSReadLine v podporované verzi PowerShellu, spusťte následující příkaz.
Install-Module -Name PSReadLine -AllowClobber -Force
Vlastní vazby klíčů
PSReadLine podporuje vlastní vazby klíčů pomocí rutiny Set-PSReadLineKeyHandler
. Většina vlastních vazeb klíčů volá některou z vazebných funkcí, například
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
SkriptBlock můžete svázat s klíčem. ScriptBlock může udělat prakticky cokoli, co chcete. Mezi užitečné příklady patří:
- úprava příkazového řádku
- otevření nového okna (například nápověda)
- změna adresářů beze změny příkazového řádku
ScriptBlock přijímá dva argumenty:
$key
– Objekt [ConsoleKeyInfo], který je klíčem, který aktivoval vlastní vazbu. Pokud svážete stejný ScriptBlock s více klíči a potřebujete provádět různé akce v závislosti na klíči, můžete zkontrolovat$key
. Mnoho vlastních vazeb tento argument ignoruje.$arg
- Libovolný argument. Nejčastěji se jedná o celočíselný argument, který uživatel předává z vazeb klíčů DigitArgument. Pokud vazba nepřijímá argumenty, je vhodné tento argument ignorovat.
Podívejme se na příklad, který přidá příkazový řádek do historie bez jeho spuštění. To je užitečné, když zjistíte, že jste něco zapomněli udělat, ale nechcete znovu zadat příkazový řádek, který jste už zadali.
$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
V souboru SamplePSReadLineProfile.ps1
můžete vidět mnoho dalších příkladů, které jsou nainstalovány ve složce modulu PSReadLine .
Většina klíčových vazeb používá některé pomocné funkce pro úpravu příkazového řádku. Tato rozhraní API jsou zdokumentovaná v about_PSReadLine_Functions.
Notes
Historie příkazů
PSReadLine udržuje soubor historie obsahující všechny příkazy a data, která jste zadali z příkazového řádku. Soubory historie jsou soubor s názvem $($host.Name)_history.txt
. V systémech Windows je soubor historie uložen na $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
adrese .
Historie může obsahovat citlivá data včetně hesel. PsReadLine se pokusí vyfiltrovat citlivé informace. Všechny příkazové řádky obsahující následující řetězce se do souboru historie nezapisují.
password
asplaintext
token
apikey
secret
PSReadLine 2.2.0 zlepšuje filtrování citlivých dat.
- Pomocí stromu syntaxe abstraktní syntaxe PowerShellu (AST) analyzovaného příkazového řádku vyhledá citlivá data.
- Pomocí seznamu povolených rutin z modulu SecretManagement povolí přidání těchto příkazů do historie. Seznam povolených adres obsahuje:
Get-Secret
Get-SecretInfo
Get-SecretVault
Register-SecretVault
Remove-Secret
Set-SecretInfo
Set-SecretVaultDefault
Test-SecretVault
Unlock-SecretVault
Unregister-SecretVault
Do souboru historie se můžou zapisovat například následující příkazy:
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
Do souboru historie se nezapisují následující příkazy:
$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.
Pokud do souborů historie nechcete zapisovat další příkazy, můžete použít parametr AddToHistoryHandler rutiny Set-PSReadLineOption
. Příklad použití AddToHistoryHandler naleznete v příkladu 7 Set-PSReadLineOption.
PSReadLine 2.3.4 zlepšuje filtrování citlivých dat.
Vylepšili jsme výchozí mazání citlivých historie tak, aby historie obsahovala bezpečný přístup k vlastnostem.
Pokud je citlivý řetězec součástí přístupu k vlastnosti:
- Pokud tato operace přístupu člena není součástí přiřazení, považujeme ji za bezpečnou.
- V opačném případě, pokud je pravá strana kanálem nebo proměnnou, považujeme ji také za bezpečnou.
Například následující případy použití jsou považovány za bezpečné a lze je uložit do historie.
$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
Verze také vylepšila čištění citlivých historie tak, aby umožňovalo načtení tokenu az
gcloud
pomocí nástrojů , a kubectl
příkazového řádku.
Například následující případy použití jsou považovány za bezpečné a lze je uložit do historie.
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
Historie verzí PSReadLine
Od verze, která se dodává v prostředí Windows PowerShell 5.1, existuje mnoho aktualizací psReadLine.
- Aktuální verze je PSReadLine 2.3.4
- PowerShell 7.4 se dodává s PSReadLine 2.3.4
- PowerShell 7.3 se dodává s PSReadLine 2.2.6
- PowerShell 7.2 se dodává s PSReadLine 2.1.0
- PowerShell 7.0.11 dodáván s PSReadLine 2.0.4
- PowerShell 5.1 se dodává s PSReadLine 2.0.0
Úplný seznam změn najdete v souboru PSReadLine ChangeLog.
- PSReadLine 2.3.4
Kromě několika oprav chyb zahrnuje tato verze následující vylepšení:
Scrollable ListView for Predictive IntelliSense
- Automaticky nastaví velikost na základě velikosti okna terminálu.
- Může obsahovat až 50 výsledků předpovědi.
- Dynamická hlavička seznamu, která zobrazuje počet výsledků a aktuální zdroj predikcí
Vylepšené mazání citlivých historie umožňující načtení tokenu z
az
,gcloud
akubectl
Vylepšení výchozího scrubbingu citlivé historie, aby byl povolený přístup k bezpečným vlastnostem
Přidání podpory pro upcasing, downcasing a velká písmena slova
Dokončení tabulátoru zobrazuje výsledky, jejichž
ListItemText
výsledky se liší jenom podle velkých a velkých písmenPodporuje příkaz
<d,i,w>
textového objektu v režimu úprav VI.Změna výchozí barvy vložené předpovědi na neaktivní
Přidání ukázky do souboru README pro transformaci bodu kódu Unicode na znak Unicode
Alt+x
Přidání možnosti TerminateOrphanedConsoleApps ve Windows k ukončení osamoceného procesu připojeného ke konzole, který může pokazit čtení ze vstupu konzoly
PSReadLine 2.2.6
V této verzi je funkce Prediktivní technologie IntelliSense ve výchozím nastavení povolená v závislosti na následujících podmínkách:
- Pokud je virtuální terminál (VT) podporovaný a psReadLine spuštěný v PowerShellu 7.2 nebo novějším, je PredictionSource nastavený na
HistoryAndPlugin
- Pokud je virtuální počítač podporovaný a psReadLine spuštěný v PowerShellu před 7.2, je PredictionSource nastavený na
History
- Pokud se virtuální počítač nepodporuje, je PredictionSource nastavený na
None
- Pokud je virtuální terminál (VT) podporovaný a psReadLine spuštěný v PowerShellu 7.2 nebo novějším, je PredictionSource nastavený na
PSReadLine 2.2.5
Oficiální servisní vydání s drobnými opravami chyb
PSReadLine 2.2.2
- PsReadLine přidal dvě nové prediktivní funkce IntelliSense:
- Přidání PredictionViewStyle parametru, který umožňuje výběr nového
ListView
. - Připojení psReadLine na
CommandPrediction
Rozhraní API zavedená v PowerShellu 7.2 umožňující uživateli importovat prediktorový modul, který může vykreslit návrhy z vlastního zdroje.
- Přidání PredictionViewStyle parametru, který umožňuje výběr nového
- Aktualizace pro použití verze 1.0.0 pro dynamickou nápovědu
Microsoft.PowerShell.Pager
- Vylepšené čištění citlivých položek historie
- Spousta oprav chyb a menší vylepšení
- PsReadLine přidal dvě nové prediktivní funkce IntelliSense:
PSReadLine 2.1.0
Tato verze shrnuje následující vylepšení přidaná od verze 2.0.4:
- Přidání návrhů prediktivní technologie IntelliSense z historie příkazů
- Mnoho oprav chyb a vylepšení rozhraní API
PSReadLine 2.0.4
Tato verze shrnuje následující vylepšení přidaná od verze 2.0.0:
- Přidání parametru
-Chord
proGet-PSReadLineKeyHandler
povolení hledání konkrétních vazeb klíčů
- Přidání parametru
Zpětná vazba a přispívání do PSReadLine
Nebojte se odeslat žádost o přijetí změn nebo odeslat zpětnou vazbu na stránce GitHubu.
Viz také
- PsReadLine je silně ovlivněn knihovnou GNU readline .