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.ps1
szá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\PSReadLine
tá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
Nyugodtan küldjön lekéréses kérelmet, vagy küldjön visszajelzést a GitHub-oldalon.
Kapcsolódó információk
- A PSReadLine-t nagymértékben befolyásolja a GNU olvasóvonal-kódtár .