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. K dispozici jsou novější verze. Aktuální verzi PSReadLine lze nainstalovat a používat na Windows PowerShell 5.1 a novějších. U některých funkcí musíte používat PowerShell 7.2 nebo novější.

PSReadLine poskytuje výkonné prostředí pro úpravy příkazového řádku pro konzolu PowerShellu. Tato služba poskytuje:

  • Barevné zvýraznění syntaxe příkazového řádku
  • Vizuální indikace chyb syntaxe
  • Lepší víceřádkové prostředí (jak pro úpravy, tak pro historii)
  • 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í v režimu Emacs)
  • Emacs yank/kill-ring
  • Přesun a odstranění slova na základě tokenů 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 Okna a editorem Visual Studio Code. Nefunguje v Windows PowerShell ISE.

PSReadLine se dá 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. PsReadLine v současné době nefunguje dobře se čtečkami obrazovky. Výchozí vykreslování a formátování PowerShellu 7.0 ve Windows funguje správně. V případě potřeby můžete modul načíst ručně.

Prediktivní intellisense

Prediktivní technologie IntelliSense je doplňkem konceptu dokončování tabulátoru, který pomáhá uživateli ú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 predikcí 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 požadavky specifické pro doménu a vlastní požadavky.

Pokud chcete funkci Predictive IntelliSense zakázat, stačí spustit:

Set-PSReadLineOption -PredictionSource None

Poznámka

Prediktivní technologie 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í klávesové zkratky

PSReadLine podporuje vlastní vazby klíčů pomocí rutiny Set-PSReadLineKeyHandler . Většina vlastních klávesových vazeb volá například jednu z vazebných funkcí.

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

Objekt ScriptBlock můžete vytvořit vazbu ke klíči. ScriptBlock může dělat prakticky vše, co chcete. Mezi užitečné příklady patří:

  • úprava příkazového řádku
  • otevření nového okna (například nápovědy)
  • změna adresářů bez změny příkazového řádku

Skript ScriptBlock obdrží dva argumenty:

  • $keyObjekt [ConsoleKeyInfo], který je klíčem, který aktivoval vlastní vazbu. Pokud vytvoříte vazbu stejného objektu ScriptBlock na více klíčů a potřebujete provést 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á z vazby 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

Mnoho dalších příkladů můžete vidět v souboru SamplePSReadLineProfile.ps1, který je nainstalovaný ve složce modulu PSReadLine .

Většina klávesových vazeb používá některé pomocné funkce pro úpravy 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ý na adrese $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine. V jiných systémech než Windows se soubory historie ukládají na nebo $env:XDG_DATA_HOME/powershell/PSReadLine$env:HOME/.local/share/powershell/PSReadLine.

Historie může obsahovat citlivá data včetně hesel. PSReadLine se pokusí vyfiltrovat citlivé informace. Žádné příkazové řádky obsahující následující řetězce se do souboru historie nezapisují.

  • heslo
  • asplaintext
  • token
  • apikey
  • Tajný kód

PSReadLine 2.2.0 zlepšuje filtrování citlivých dat následujícími způsoby:

  • Pomocí stromu abstraktní syntaxe PowerShellu (AST) analyzovaného příkazového řádku vyhledá citlivá data.
  • Pomocí seznamu povolených bezpečných rutin z modulu SecretManagement umožňuje přidání těchto příkazů do historie. Seznam povolených obsahuje:
    • Get-Secret
    • Get-SecretInfo
    • Get-SecretVault
    • Register-SecretVault
    • Remove-Secret
    • Set-SecretInfo
    • Set-SecretVaultDefault
    • Test-SecretVault
    • Unlock-SecretVault
    • Unregister-SecretVault

Například následující příkazy mohou být zapsány do souboru historie:

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.

Historie vydaných verzí PSReadLine

Od verze, která se dodává v Windows PowerShell 5.1, došlo k mnoha aktualizacím PSReadLine.

  • PowerShell 7.3 se dodává s PSReadLine 2.2.6
  • PowerShell 7.2.5 se dodává s PSReadLine 2.1.0
  • PowerShell 7.0.11 se dodává 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.2.6

    V této verzi je funkce Predictive IntelliSense ve výchozím nastavení povolená v závislosti na následujících podmínkách:

    • Pokud se podporuje virtuální terminál (VT) a PSReadLine běží v PowerShellu 7.2 nebo novějším, predictionSource je nastavený na HistoryAndPlugin
    • Pokud se VT podporuje a PSReadLine běží v PowerShellu před verzí 7.2, predictionSource je nastavená na History
    • Pokud se VT nepodporuje, predictionSource je nastavená na None
  • PSReadLine 2.2.5

    Oficiální servisní vydání s menšími opravami chyb

  • PSReadLine 2.2.2

    • PsReadLine přidal dvě nové prediktivní funkce IntelliSense:
      • Přidání parametru PredictionViewStyle pro povolení výběru nového ListViewobjektu .
      • Připojení PSReadLine k CommandPrediction rozhraním API zavedeným v PowerShellu 7.2, aby uživatel mohl importovat vysvětlující modul, který může vykreslovat návrhy z vlastního zdroje.
    • Aktualizace pro použití verze 1.0.0 nástroje pro dynamickou nápovědu Microsoft.PowerShell.Pager
    • Vylepšili jsme scrubbing 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í prediktivních návrhů IntelliSense z historie příkazů
    • Opravy 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 do Get-PSReadLineKeyHandler , aby bylo možné hledat konkrétní vazby klíčů

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ěna knihovnou GNU readline .