Sdílet prostřednictvím


about_PSReadLine

Short Description

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

Od verze, která se dodává v prostředí Windows PowerShell 5.1, existuje mnoho aktualizací psReadLine.

  • Verze 2.3.5 byla poprvé dodána v PowerShellu 7.4.2 a 7.5.0-preview.3
  • Verze 2.3.4 byla poprvé odeslána v PowerShellu 7.4.0-rc.1
  • Verze 2.2.6 byla poprvé odeslána v PowerShellu 7.3.0
  • Verze 2.1.0 byla poprvé odeslána v PowerShellu 7.2.5
  • verze 2.0.4 byla poprvé odeslána v PowerShellu 7.0.11
  • Verze 2.0.0 se dodává ve Windows PowerShellu 5.1

Další informace o rozdílech verzí najdete v tématu about_PSReadLine_Release_Notes.

Dlouhý popis

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

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

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 .