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. Sono disponibili versioni più recenti. 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, il terminale finestra 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 nei modi seguenti:

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

Cronologia delle versioni di PSReadLine

Ci sono stati molti aggiornamenti di PSReadLine dalla versione che viene fornita in Windows PowerShell 5.1.

  • PowerShell 7.3 viene fornito con PSReadLine 2.2.6
  • PowerShell 7.2.5 viene fornito con PSReadLine 2.1.0
  • PowerShell 7.0.11 viene 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.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:
      • Aggiunta del 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 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 di IntelliSense predittivi 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 -Chord parametro a per Get-PSReadLineKeyHandler consentire la ricerca di associazioni di tasti specifiche

Commenti e & suggerimenti per 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.