about_PSReadLine

Breve descrizione

PSReadLine offre un'esperienza di modifica della riga di comando migliorata nella console di PowerShell.

Descrizione lunga

PowerShell 7.4 viene fornito con PSReadLine 2.3.4. 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. Offre:

  • Colorazione della sintassi della riga di comando
  • Indicazione visiva degli errori di sintassi
  • Un'esperienza multilinea migliore (modifica e cronologia)
  • Tasti di scelta rapida personalizzabili
  • Modalità Cmd ed 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 basata su token di PowerShell
  • IntelliSense predittivo
  • Visualizzazione dinamica della Guida nella console senza perdere la posizione 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 in Windows PowerShell I edizione Standard.

PSReadLine può essere installato da 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 per la lettura dello schermo. Attualmente PSReadLine non funziona bene con le utilità per la lettura dello schermo. Il rendering e la formattazione predefiniti di PowerShell 7.0 in Windows funzionano correttamente. Se necessario, è possibile caricare manualmente il modulo.

IntelliSense predittivo

IntelliSense predittivo è un'aggiunta al concetto di completamento della scheda che consente all'utente di completare correttamente i comandi. Consente agli utenti di individuare, modificare ed eseguire comandi completi in base alle stime corrispondenti della cronologia dell'utente e ai 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 di seguito.

Tasti di scelta rapida personalizzati

PSReadLine supporta associazioni di chiavi personalizzate usando il Set-PSReadLineKeyHandler cmdlet . La maggior parte delle associazioni di tasti personalizzate chiama una delle funzioni associabili, ad esempio

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

È possibile associare un oggetto 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 ed è necessario eseguire azioni diverse a seconda della chiave, è possibile controllare $key. Molte associazioni personalizzate ignorano questo argomento.

  • $arg - Argomento arbitrario. Nella maggior parte dei casi, si tratta di un argomento integer che l'utente passa dalle associazioni di chiave DigitArgument. Se l'associazione non accetta argomenti, è ragionevole ignorare questo argomento.

Di seguito viene illustrato un esempio che aggiunge una riga di comando alla cronologia senza eseguirla. Ciò è utile quando ci si rende conto di aver dimenticato di eseguire un'operazione, 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 dei tasti di scelta rapida usa alcune funzioni helper per la modifica della riga di comando. Queste 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. 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 del modulo SecretManagement per consentire l'aggiunta di tali comandi alla cronologia. L'elenco di elementi consentiti 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 desidera scrivere nei file di cronologia, è possibile usare il parametro AddToHistoryHandler del Set-PSReadLineOption cmdlet . Per un esempio di come usare AddToHistoryHandler, vedere l'esempio 7 di Set-PSReadLineOption.

PSReadLine 2.3.4 migliora il filtro dei dati sensibili

Miglioramento dello scrubbing della cronologia sensibile predefinito per consentire alla cronologia di contenere l'accesso sicuro alle proprietà.

Quando la stringa sensibile fa parte di un accesso alle 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, viene considerato sicuro

Ad esempio, i casi d'uso seguenti sono 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 migliorato anche lo scrubbing della cronologia sensibile per consentire il recupero del token usando gli azstrumenti da riga di comando , gcloude kubectl .

Ad esempio, i casi d'uso seguenti sono 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

Sono stati apportati molti aggiornamenti a PSReadLine dalla versione 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

    • Adatta automaticamente 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
  • Pulitura della cronologia sensibile migliorata per consentire il recupero del token da az, gcloude kubectl

  • Migliorare lo scrubbing della cronologia sensibile predefinito per consentire l'accesso sicuro alle proprietà

  • Aggiunta del supporto per l'upcasing, il downcasing e l'uso delle parole maiuscole

  • Rendi i risultati di completamento della scheda i cui ListItemText risultati sono diversi solo per caso

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

  • Modificare il colore predefinito per la stima inline in dim

  • Aggiungere un esempio a README per trasformare il punto di codice Unicode in caratteri Unicode per Alt+x

  • Aggiungere l'opzione TerminateOrphanedConsoleApps in Windows per terminare il processo collegato alla console orfano che potrebbe causare confusione durante la lettura dall'input della console

  • PSReadLine 2.2.6

    In questa versione la funzionalità DitelliSense predittiva è 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 di manutenzione ufficiale 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 .
      • Connessione ed PSReadLine a CommandPrediction LE API introdotte in PowerShell 7.2 per consentire a un utente di importare un modulo predictor in grado di 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 dalla versione 2.0.4:

    • Aggiungere suggerimenti predittivi di IntelliSense dalla cronologia dei comandi
    • Molte correzioni di bug e miglioramenti delle API
  • PSReadLine 2.0.4

    Questa versione esegue il rollup dei miglioramenti seguenti aggiunti dalla versione 2.0.0:

    • Aggiunta del parametro a per Get-PSReadLineKeyHandler consentire la -Chord ricerca di associazioni di chiavi specifiche

Feedback e contributo a PSReadLine

PSReadLine in GitHub

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

Vedi anche

  • PSReadLine è fortemente influenzato dalla libreria di lettura GNU.