about_PSReadLine

Short Description

PSReadLine poskytuje vylepšené prostředí pro úpravy příkazového řádku v konzole PowerShellu.

Dlouhý popis

PowerShell 7.4 se dodává s PSReadLine 2.3.4. 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 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

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í intelliSense je ve výchozím nastavení povolená v PSReadLine 2.2.6. 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á 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.ps1můž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\PSReadLineadrese . V systémech jiných než Windows jsou soubory historie uloženy na $env:XDG_DATA_HOME/powershell/PSReadLine adrese 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 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 azgcloudpomocí 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, gclouda kubectl

  • 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ísmen

  • Podporuje 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
  • 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.
    • 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 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 pro Get-PSReadLineKeyHandler povolení hledání konkrétních vazeb klíčů

Zpětná vazba a 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 knihovnou GNU readline .