Condividi tramite


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 azstrumenti della riga di comando , gcloude 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, gcloude kubectl

  • 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 caso

  • Supporta il comando <d,i,w> text-object nella modalità di modifica VI

  • Modificare 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
  • 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 ListViewoggetto .
      • 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.
    • 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 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

Feedback & contributo a PSReadLine

PSReadLine in GitHub

È possibile inviare una richiesta pull o inviare commenti e suggerimenti nella pagina GitHub.

Vedere anche

  • PSReadLine è fortemente influenzato dalla libreria di lettura GNU.