Sdílet prostřednictvím


about_PSReadLine

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

  • 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, 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, gclouda kubectl

  • Vylepš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ž ListItemText se liší pouze pro velká a malá písmena

  • Podporuje 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+x

  • Př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
  • 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 CommandPrediction zavedeným v PowerShellu 7.2, aby uživatel mohl importovat prediktorový modul, který může vykreslit návrhy z vlastního zdroje.
    • Aktualizace pro použití verze 1.0.0 Microsoft.PowerShell.Pager pro dynamickou nápovědu
    • Vylepšené čištění citlivých položek historie
    • Spousta oprav chyb a menší vylepšení
  • 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 -Chord parametr pro Get-PSReadLineKeyHandler umožňující vyhledávání konkrétních klávesových zkratek

Zpětná vazba & přispívání do PSReadLine

PSReadLine na GitHubu

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.