Megosztás a következőn keresztül:


about_PSReadLine

Rövid leírás

A PSReadLine továbbfejlesztett parancssori szerkesztési felületet biztosít a PowerShell-konzolon.

A Windows PowerShell 5.1-es verziójától kezdve számos frissítés érkezett a PSReadLine-hoz.

  • A 2.3.5-ös verziót először a PowerShell 7.4.2-ben és a 7.5.0-preview.3-ban szállították le
  • v2.3.4 először a PowerShell 7.4.0-rc.1-ben
  • a 2.2.6-os verziót először a PowerShell 7.3.0-s verzióban szállították le
  • A 2.1.0-s verziót először a PowerShell 7.2.5-ben szállították le
  • A 2.0.4-et először a PowerShell 7.0.11-ben szállították le
  • v2.0.0-s hajók a Windows PowerShell 5.1-ben

A verzióeltérésről további információt a about_PSReadLine_Release_Notes talál.

Hosszú leírás

A PSReadLine jelenlegi verziója telepíthető és használható a Windows PowerShell 5.1-es és újabb verzióiban. Egyes funkciókhoz a PowerShell 7.2-s vagy újabb verzióját kell futtatnia.

A PSReadLine hatékony parancssori szerkesztési felületet biztosít a PowerShell-konzolhoz. Ez biztosítja:

  • A parancssor szintaxisszínezése
  • Szintaxishibák vizuális jelzése
  • Jobb többsoros felület (szerkesztés és előzmények)
  • Testreszabható kulcskötések
  • Cmd és Emacs módok
  • Számos konfigurációs lehetőség
  • Bash-stílus befejezése (nem kötelező Cmd módban, alapértelmezett Emacs módban)
  • Emacs yank/kill-ring
  • A PowerShell-jogkivonaton alapuló "szó" áthelyezés és törlés
  • Prediktív IntelliSense
  • A súgó dinamikus megjelenítése a konzolon anélkül, hogy elveszítené a helyét a parancssorban

A PSReadLine használatához PowerShell 5.1 vagy újabb verzió szükséges. A PSReadLine az alapértelmezett Windows-konzolgazda, a Windows Terminal és a Visual Studio Code használatával működik. Nem működik a Windows PowerShell ISE-ben.

A PSReadLine a PowerShell-galéria telepíthető. A PSReadLine a PowerShell támogatott verziójában való telepítéséhez futtassa az alábbi parancsot.

Install-Module -Name PSReadLine -AllowClobber -Force

Feljegyzés

A PowerShell 7.0-tól kezdve kihagyja a PSReadLine automatikus betöltését Windows rendszeren, ha képernyőolvasó programot észlel. A PSReadLine jelenleg nem működik megfelelően a képernyőolvasókkal. A PowerShell 7.0 alapértelmezett renderelése és formázása Windows rendszeren megfelelően működik. Szükség esetén manuálisan is betöltheti a modult.

Prediktív IntelliSense

A prediktív IntelliSense a lapkiegészítés fogalmának kiegészítése, amely segít a felhasználónak a parancsok sikeres végrehajtásában. Lehetővé teszi a felhasználók számára a teljes parancsok felderítését, szerkesztését és végrehajtását a felhasználó előzményeinek és további tartományspecifikus beépülő moduljainak megfelelő előrejelzések alapján.

Prediktív IntelliSense engedélyezése

A prediktív IntelliSense alapértelmezés szerint le van tiltva. Az előrejelzések engedélyezéséhez futtassa a következő parancsot:

Set-PSReadLineOption -PredictionSource History

A PredictionSource paraméter a tartományspecifikus és egyéni követelmények beépülő moduljait is képes fogadni.

A Prediktív IntelliSense letiltásához egyszerűen futtassa a következőt:

Set-PSReadLineOption -PredictionSource None

Egyéni kulcskötések

A PSReadLine támogatja az egyéni kulcskötéseket a Set-PSReadLineKeyHandler parancsmag használatával. A legtöbb egyéni kulcskötés meghívja az egyik köthető függvényt, például

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

A ScriptBlockot kulcshoz kötheti. A ScriptBlock szinte bármit megtehet, amit csak szeretne. Néhány hasznos példa:

  • a parancssor szerkesztése
  • új ablak megnyitása (például súgó)
  • címtárak módosítása a parancssor módosítása nélkül

A ScriptBlock két argumentumot fogad:

  • $key - Egy [ConsoleKeyInfo] objektum, amely az egyéni kötést kiváltó kulcs. Ha ugyanazt a ScriptBlock-et több kulcshoz köti, és a kulcstól függően különböző műveleteket kell végrehajtania, ellenőrizheti $key. Ezt az argumentumot számos egyéni kötés figyelmen kívül hagyja.

  • $arg - Tetszőleges argumentum. Ez leggyakrabban egy egész szám argumentum, amelyet a felhasználó a DigitArgument kulcskötésekből ad át. Ha a kötés nem fogadja el az argumentumokat, érdemes figyelmen kívül hagyni ezt az argumentumot.

Tekintsünk meg egy példát, amely parancssort ad hozzá az előzményekhez anélkül, hogy végrehajtanák. Ez akkor hasznos, ha rájön, hogy elfelejtett valamit tenni, de nem szeretné újra beírni a már beírt parancssort.

$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

A PSReadLine modulmappában telepített fájlban SamplePSReadLineProfile.ps1számos további példa látható.

A legtöbb kulcskötés néhány segédfüggvényt használ a parancssor szerkesztéséhez. Ezek az API-k about_PSReadLine_Functions vannak dokumentálva.

Jegyzetek

Parancselőzmények

A PSReadLine egy előzményfájlt tart fenn, amely tartalmazza a parancssorból beírt összes parancsot és adatot. Az előzményfájlok egy $($host.Name)_history.txt. Windows rendszereken az előzményfájlt a rendszer a következő helyen $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLinetárolja: . A nem Windows rendszerű rendszereken az előzményfájlok tárolása a következő helyen $env:XDG_DATA_HOME/powershell/PSReadLine történik $env:HOME/.local/share/powershell/PSReadLine: vagy .

Az előzmények bizalmas adatokat, például jelszavakat tartalmazhatnak. A PSReadLine megpróbálja kiszűrni a bizalmas információkat. Az alábbi sztringeket tartalmazó parancssorok nem lesznek beírva az előzményfájlba.

  • password
  • asplaintext
  • token
  • apikey
  • secret

A PSReadLine 2.2.0 javítja a bizalmas adatok szűrését

  • Az elemezett parancssor PowerShell absztrakt szintaxisfáját (AST) használja a bizalmas adatok kereséséhez.
  • A SecretManagement modulban található biztonságos parancsmagok engedélyezési listájával engedélyezi a parancsok hozzáadását az előzményekhez. Az engedélyezési lista a következőket tartalmazza:
    • Get-Secret
    • Get-SecretInfo
    • Get-SecretVault
    • Register-SecretVault
    • Remove-Secret
    • Set-SecretInfo
    • Set-SecretVaultDefault
    • Test-SecretVault
    • Unlock-SecretVault
    • Unregister-SecretVault

Például a következő parancsok írhatók az előzményfájlba:

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

A következő parancsok nem lesznek beírva az előzményfájlba:

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

Ha vannak olyan parancsok, amelyeket nem szeretne az előzményfájlokba írni, használhatja a Set-PSReadLineOption parancsmag AddToHistoryHandler paraméterét. Az AddToHistoryHandler használatára példa: Set-PSReadLineOption 7. példa.

A PSReadLine 2.3.4 javítja a bizalmas adatok szűrését

Továbbfejlesztettük az alapértelmezett bizalmas előzménytisztítást, hogy az előzmények biztonságos tulajdonsághozzáférést tartalmazzanak.

Ha a bizalmas sztring egy tulajdonsághozzáférés része:

  • Ha ez a taghozzáférési művelet nem része a hozzárendelésnek, akkor biztonságosnak tartjuk
  • Ellenkező esetben, ha a jobb oldali folyamat vagy változó, akkor azt is biztonságosnak tartjuk

A következő használati esetek például biztonságosnak tekinthetők, és menthetők az előzményekbe.

$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

A kiadás javította a bizalmas előzménytisztítást is, hogy lehetővé tegye a jogkivonat lekérését a az, gcloudés kubectl parancssori eszközökkel.

A következő használati esetek például biztonságosnak tekinthetők, és menthetők az előzményekbe.

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

Visszajelzés & hozzájárulás a PSReadLine-hoz

PSReadLine a GitHubon

Nyugodtan küldjön lekéréses kérelmet, vagy küldjön visszajelzést a GitHub-oldalon.

Kapcsolódó információk