Condividi tramite


about_PSReadLine

Breve descrizione

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

Sono stati apportati molti aggiornamenti a PSReadLine dalla versione fornita in Windows PowerShell 5.1.

  • Versione 2.3.5 fornita per la prima volta in PowerShell 7.4.2 e 7.5.0-preview.3
  • v2.3.4 fornito per la prima volta in PowerShell 7.4.0-rc.1
  • Versione 2.2.6 fornita per la prima volta in PowerShell 7.3.0
  • Versione 2.1.0 fornita per la prima volta in PowerShell 7.2.5
  • Versione 2.0.4 fornita per la prima volta in PowerShell 7.0.11
  • v2.0.0 viene fornito in Windows PowerShell 5.1

Per altre informazioni sulle differenze di versione, vedere about_PSReadLine_Release_Notes.

Descrizione lunga

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

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

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

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.