Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Krátký popis
PSReadLine poskytuje vylepšené prostředí pro úpravy příkazového řádku v konzole PowerShellu.
Dlouhý popis
PowerShell 7.3 se dodává s PSReadLine 2.2.6. 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
- Prediktivní IntelliSense
- Dynamické zobrazení nápovědy v konzole bez ztráty místa na příkazovém řádku
PSReadLine vyžaduje PowerShell 5.1 nebo novější. PSReadLine funguje s výchozím hostitelem konzoly Windows, terminálem Windows a editorem Visual Studio Code. V prostředí Windows PowerShell ISE nefunguje.
PsReadLine je možné 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
Poznámka:
Počínaje PowerShellem 7.0 powershell přeskočí automatické načítání PSReadLine ve Windows, pokud je zjištěn program čtečky obrazovky. V současné době PSReadLine nefunguje dobře se čtečkami obrazovky. Výchozí vykreslování a formátování PowerShellu 7.0 ve Windows funguje správně. Modul můžete v případě potřeby načíst ručně.
Prediktivní IntelliSense
Prediktivní IntelliSense je navíc konceptem dokončování tabulátoru, který uživateli pomáhá úspěšně dokončit příkazy. Umožňuje uživatelům zjišťovat, upravovat a spouštět úplné příkazy na základě odpovídajících předpovědí z historie uživatele a dalších modulů plug-in specifických pro doménu.
Povolení prediktivní technologie IntelliSense
Prediktivní technologie IntelliSense je ve výchozím nastavení zakázaná. Pokud chcete povolit predikce, stačí spustit následující příkaz:
Set-PSReadLineOption -PredictionSource History
Parametr PredictionSource může také přijímat moduly plug-in pro konkrétní doménu a vlastní požadavky.
Pokud chcete prediktivní technologii IntelliSense zakázat, stačí spustit:
Set-PSReadLineOption -PredictionSource None
Poznámka:
Prediktivní technologie IntelliSense je ve výchozím nastavení v PSReadLine 2.2.6 povolená. Další informace najdete v historii verzí PSReadLine v části Poznámky níže.
Vlastní vazby klíčů
PSReadLine podporuje vlastní vazby klíčů pomocí rutiny Set-PSReadLineKeyHandler. Většina vlastních vazeb klíčů volá jednu 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.ps1můžete vidět mnoho dalších příkladů, které jsou nainstalované 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.
Poznámky
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 v $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine. V systémech, které nejsou systémy Windows, jsou soubory historie uloženy v $env:XDG_DATA_HOME/powershell/PSReadLine nebo $env:HOME/.local/share/powershell/PSReadLine.
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í.
passwordasplaintexttokenapikeysecret
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-SecretGet-SecretInfoGet-SecretVaultRegister-SecretVaultRemove-SecretSet-SecretInfoSet-SecretVaultDefaultTest-SecretVaultUnlock-SecretVaultUnregister-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, viz příklad 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 mazání citlivých historie tak, aby umožňovalo načtení tokenu pomocí nástrojů příkazového řádku az, gclouda kubectl.
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á s Windows PowerShell 5.1, bylo provedeno mnoho aktualizací PSReadLine.
- Aktuální verze je PSReadLine 2.3.4
- PowerShell 7.4 je dodáván s PSReadLine 2.3.4
- PowerShell 7.3 se dodává s PSReadLine 2.2.6
- PowerShell 7.2 je dodáván s PSReadLine 2.1.0
- PowerShell 7.0.11 dodávaný s PSReadLine 2.0.4
- PowerShell 5.1 se dodává s PSReadLine 2.0.0
Úplný seznam změn najdete v protokolu změn PSReadLine.
- PSReadLine 2.3.4
Kromě několika oprav chyb zahrnuje tato verze následující vylepšení:
Rolovací zobrazení seznamu pro prediktivní technologii 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é čištění citlivé historie umožňující načítání tokenů z
az,gcloudakubectlVylepšit výchozí čištění citlivé historie, umožňující bezpečný přístup k vlastnostem
Přidání podpory pro převod na velká písmena, převod na malá písmena a kapitalizaci slov
Provedení dokončování tabulátoru zobrazuje výsledky, jejichž
ListItemTextse liší pouze pro velká a malá písmenaPodporuje příkaz textového objektu
<d,i,w>v režimu úprav VI.Změna výchozí barvy pro inline předpovědi na tlumenou.
Přidání ukázky do souboru README pro transformaci bodu kódu Unicode na znak Unicode pomocí
Alt+xPřidejte možnost TerminateOrphanedConsoleApps v systému Windows, abyste zabili osiřelý proces připojený ke konzole, který může zkazit č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, PredictionSource je nastavená na
HistoryAndPlugin - Pokud je VT podporován a PSReadLine spuštěný v PowerShellu před verzí 7.2, PredictionSource je nastaven na
History - Pokud není podpora pro virtualizační technologii (VT), PredictionSource je nastaven na
None
- Pokud je virtuální terminál (VT) podporovaný a psReadLine spuštěný v PowerShellu 7.2 nebo novějším, PredictionSource je 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í parametru PredictionViewStyle, který umožňuje výběr nového
ListView. - Připojeno psReadLine k rozhraním API
CommandPredictionzavedeným v PowerShellu 7.2, aby uživatel mohl importovat prediktorový modul, který může vykreslit návrhy z vlastního zdroje.
- Přidání parametru PredictionViewStyle, který umožňuje výběr nového
- Aktualizace pro použití verze 1.0.0
Microsoft.PowerShell.Pagerpro dynamickou nápovědu - 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 obsahuje následující vylepšení přidaná od verze 2.0.0:
- Přidán
-Chordparametr proGet-PSReadLineKeyHandlerumožňující vyhledávání konkrétních klávesových zkratek
- Přidán
Zpětná vazba & 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 gnu readline knihovnou.