about_PSReadLine
Descrizione breve
PSReadLine offre un'esperienza di modifica della riga di comando migliorata nella console di PowerShell.
Descrizione lunga
PowerShell 7.3 viene fornito con PSReadLine 2.2.6. La versione corrente è PSReadLine 2.3.4. La versione corrente di PSReadLine può essere installata e usata in Windows PowerShell 5.1 e versioni successive. Per alcune funzionalità, è necessario eseguire PowerShell 7.2 o versione successiva.
PSReadLine offre una potente esperienza di modifica della riga di comando per la console di PowerShell. Fornisce:
- Colorazione della sintassi della riga di comando
- Indicazione visiva degli errori di sintassi
- Un'esperienza multilinea migliore (modifica e cronologia)
- Associazioni di chiavi personalizzabili
- Modalità Cmd e Emacs
- Molte opzioni di configurazione
- Completamento dello stile Bash (facoltativo in modalità Cmd, impostazione predefinita in modalità Emacs)
- Emacs yank/kill-ring
- Spostamento ed eliminazione dei token di PowerShell basati su "word"
- IntelliSense predittivo
- Visualizzazione dinamica della Guida nella console senza perdere il posto nella riga di comando
PSReadLine richiede PowerShell 5.1 o versione successiva. PSReadLine funziona con l'host della console di Windows predefinito, Terminale Windows e Visual Studio Code. Non funziona nel Windows PowerShell ISE.
PSReadLine può essere installato dal PowerShell Gallery. Per installare PSReadLine in una versione supportata di PowerShell, eseguire il comando seguente.
Install-Module -Name PSReadLine -AllowClobber -Force
Nota
A partire da PowerShell 7.0, PowerShell ignora il caricamento automatico di PSReadLine in Windows se viene rilevato un programma di lettura dello schermo. Attualmente PSReadLine non funziona bene con le utilità di lettura dello schermo. Il rendering predefinito e la formattazione di PowerShell 7.0 in Windows funziona correttamente. Se necessario, è possibile caricare manualmente il modulo.
IntelliSense predittivo
IntelliSense predittivo è un'aggiunta al concetto di completamento della scheda che aiuta l'utente a completare correttamente i comandi. Consente agli utenti di individuare, modificare ed eseguire comandi completi in base alle stime corrispondenti dalla cronologia dell'utente e dai plug-in specifici del dominio aggiuntivi.
Abilita IntelliSense predittivo
Per impostazione predefinita, IntelliSense predittivo è disabilitato. Per abilitare le stime, eseguire il comando seguente:
Set-PSReadLineOption -PredictionSource History
Il parametro PredictionSource può anche accettare plug-in per requisiti specifici e personalizzati del dominio.
Per disabilitare Predictive IntelliSense, è sufficiente eseguire:
Set-PSReadLineOption -PredictionSource None
Nota
IntelliSense predittivo è abilitato per impostazione predefinita in PSReadLine 2.2.6. Per altre informazioni, vedere la cronologia delle versioni di PSReadLine nella sezione Note seguente.
Associazioni di chiavi personalizzate
PSReadLine supporta associazioni di chiavi personalizzate usando il Set-PSReadLineKeyHandler
cmdlet. La maggior parte delle associazioni di chiavi personalizzate chiama una delle funzioni associabili, ad esempio
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
È possibile associare scriptBlock a una chiave. ScriptBlock può eseguire praticamente qualsiasi operazione desiderata. Alcuni esempi utili includono
- modificare la riga di comando
- apertura di una nuova finestra (ad esempio, guida)
- modificare le directory senza modificare la riga di comando
ScriptBlock riceve due argomenti:
$key
- Oggetto [ConsoleKeyInfo] che rappresenta la chiave che ha attivato l'associazione personalizzata. Se si associa lo stesso ScriptBlock a più chiavi e è necessario eseguire azioni diverse a seconda della chiave, è possibile controllare$key
. Molte associazioni personalizzate ignorano questo argomento.$arg
- Argomento arbitrario. La maggior parte delle volte, si tratta di un argomento integer che l'utente passa dalle associazioni di chiavi DigitArgument. Se l'associazione non accetta argomenti, è ragionevole ignorare questo argomento.
Esaminiamo un esempio che aggiunge una riga di comando alla cronologia senza eseguirla. Questo è utile quando si è capito che si è dimenticato di eseguire qualcosa, ma non si vuole immettere nuovamente la riga di comando già immessa.
$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
È possibile visualizzare molti altri esempi nel file SamplePSReadLineProfile.ps1
, installato nella cartella del modulo PSReadLine .
La maggior parte delle associazioni di chiavi usa alcune funzioni helper per modificare la riga di comando. Tali API sono documentate in about_PSReadLine_Functions.
Note
Cronologia dei comandi
PSReadLine gestisce un file di cronologia contenente tutti i comandi e i dati immessi dalla riga di comando. I file di cronologia sono un file denominato $($host.Name)_history.txt
. Nei sistemi Windows il file di cronologia viene archiviato in $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
. Nei sistemi non Windows i file di cronologia vengono archiviati in $env:XDG_DATA_HOME/powershell/PSReadLine
o $env:HOME/.local/share/powershell/PSReadLine
.
La cronologia può contenere dati sensibili, incluse le password. PSReadLine tenta di filtrare le informazioni riservate. Tutte le righe di comando contenenti le stringhe seguenti non vengono scritte nel file di cronologia.
password
asplaintext
token
apikey
secret
PSReadLine 2.2.0 migliora il filtro dei dati sensibili
- Usa l'albero della sintassi astratta di PowerShell (AST) della riga di comando analizzata per cercare dati sensibili.
- Usa un elenco di cmdlet sicuri dal modulo SecretManagement per consentire l'aggiunta di tali comandi alla cronologia . L'elenco allow contiene:
Get-Secret
Get-SecretInfo
Get-SecretVault
Register-SecretVault
Remove-Secret
Set-SecretInfo
Set-SecretVaultDefault
Test-SecretVault
Unlock-SecretVault
Unregister-SecretVault
Ad esempio, i comandi seguenti possono essere scritti nel file di cronologia:
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
I comandi seguenti non vengono scritti nel file di cronologia:
$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.
Se sono presenti altri comandi che non si vogliono scrivere nei file di cronologia, è possibile usare il parametro AddToHistoryHandler del Set-PSReadLineOption
cmdlet. Per un esempio di come usare AddToHistoryHandler, vedere Esempio 7 di Set-PSReadLineOption.
PSReadLine 2.3.4 migliora il filtro dei dati sensibili
È stata migliorata la pulizia della cronologia sensibile predefinita per consentire alla cronologia di contenere l'accesso sicuro alle proprietà.
Quando la stringa sensibile fa parte di un accesso alla proprietà:
- Se questa operazione di accesso ai membri non fa parte di un'assegnazione, è consigliabile considerarla sicura
- In caso contrario, se il lato destro è una pipeline o una variabile, si considera anche sicuro
Ad esempio, i casi d'uso seguenti vengono considerati sicuri e possono essere salvati nella cronologia.
$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
La versione ha inoltre migliorato lo scrubbing della cronologia sensibile per consentire il recupero del token usando gli az
strumenti della riga di comando , gcloud
e kubectl
.
Ad esempio, i casi d'uso seguenti vengono considerati sicuri e possono essere salvati nella cronologia.
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
Cronologia delle versioni di PSReadLine
Ci sono stati molti aggiornamenti di PSReadLine dalla versione che viene fornita in Windows PowerShell 5.1.
- La versione corrente è PSReadLine 2.3.4
- PowerShell 7.4 viene fornito con PSReadLine 2.3.4
- PowerShell 7.3 viene fornito con PSReadLine 2.2.6
- PowerShell 7.2 viene fornito con PSReadLine 2.1.0
- PowerShell 7.0.11 fornito con PSReadLine 2.0.4
- PowerShell 5.1 viene fornito con PSReadLine 2.0.0
Per un elenco completo delle modifiche, vedere PSReadLine ChangeLog.
- PSReadLine 2.3.4
Oltre a diverse correzioni di bug, questa versione include i miglioramenti seguenti:
Scrollable ListView for Predictive IntelliSense
- Autoadjusta le dimensioni in base alle dimensioni della finestra del terminale
- Può contenere fino a 50 risultati di stima
- Intestazione elenco dinamico che mostra il numero di risultati e l'origine di stima corrente
Pulizia della cronologia sensibile migliorata per consentire il recupero del token da
az
,gcloud
ekubectl
Migliorare lo strumento di pulizia della cronologia sensibile predefinito per consentire l'accesso sicuro alle proprietà
Aggiunta del supporto per l'upcasing, il downcasing e la maiuscola delle parole
Eseguire il completamento della scheda mostra i risultati i cui
ListItemText
casi sono diversi solo in base al casoSupporta il comando
<d,i,w>
text-object nella modalità di modifica VIModificare il colore predefinito per la stima inline in modo da dim
Aggiungere un esempio a README per trasformare il punto di codice Unicode in unicode char by
Alt+x
Aggiungere l'opzione TerminateOrphanedConsoleApps in Windows per uccidere il processo collegato alla console orfano che potrebbe causare problemi di lettura dall'input della console
PSReadLine 2.2.6
In questa versione la funzionalità Predittiva IntelliSense è abilitata per impostazione predefinita a seconda delle condizioni seguenti:
- Se il terminale virtuale (VT) è supportato e PSReadLine in esecuzione in PowerShell 7.2 o versione successiva, PredictionSource è impostato su
HistoryAndPlugin
- Se VT è supportato e PSReadLine in esecuzione in PowerShell prima della versione 7.2, PredictionSource è impostato su
History
- Se VT non è supportato, PredictionSource è impostato su
None
- Se il terminale virtuale (VT) è supportato e PSReadLine in esecuzione in PowerShell 7.2 o versione successiva, PredictionSource è impostato su
PSReadLine 2.2.5
Versione ufficiale di manutenzione con correzioni di bug secondarie.
PSReadLine 2.2.2
- PSReadLine ha aggiunto due nuove funzionalità di IntelliSense predittive:
- Aggiunto il parametro PredictionViewStyle per consentire la selezione del nuovo
ListView
oggetto . - PsReadLine connesso alle
CommandPrediction
API introdotte in PowerShell 7.2 per consentire a un utente di importare un modulo predictor che può eseguire il rendering dei suggerimenti da un'origine personalizzata.
- Aggiunto il parametro PredictionViewStyle per consentire la selezione del nuovo
- Aggiornato per usare la versione 1.0.0 di
Microsoft.PowerShell.Pager
per la Guida dinamica - Miglioramento dello scrubbing degli elementi della cronologia sensibili
- Molte correzioni di bug e miglioramenti più piccoli
- PSReadLine ha aggiunto due nuove funzionalità di IntelliSense predittive:
PSReadLine 2.1.0
Questa versione esegue il rollup dei miglioramenti seguenti aggiunti dopo la versione 2.0.4:
- Aggiungere suggerimenti di IntelliSense predittivi dalla cronologia dei comandi
- Molte correzioni di bug e miglioramenti dell'API
PSReadLine 2.0.4
Questa versione esegue il rollup dei miglioramenti seguenti aggiunti dopo la versione 2.0.0:
- Aggiunta del parametro per
Get-PSReadLineKeyHandler
consentire la-Chord
ricerca di associazioni di chiavi specifiche
- Aggiunta del parametro per
Feedback & contributo a PSReadLine
È possibile inviare una richiesta pull o inviare commenti e suggerimenti nella pagina GitHub.
Vedere anche
- PSReadLine è fortemente influenzato dalla libreria di lettura GNU.