Condividi tramite


about_ANSI_Terminals

Breve descrizione

Descrive il supporto disponibile per le sequenze di escape ANSI in PowerShell.

Descrizione lunga

PowerShell include molte funzionalità che supportano l'uso di sequenze di escape ANSI per controllare il rendering dell'output nell'applicazione terminale che ospita PowerShell.

PowerShell 7.2 ha aggiunto una nuova variabile automatica, $PSStyle, e le modifiche apportate al motore di PowerShell per supportare l'output del testo decorato da ANSI.

Supporto del terminale ANSI

Le funzionalità ANSI sono progettate per essere compatibili con i terminali basati su xterm. Per altre informazioni, vedere xterm in Wikipedia.

In Windows 10 e versioni successive, l'host console di Windows è compatibile con xterm. L'applicazione Terminale Windows è compatibile anche con xterm.

In macOS l'applicazione terminale predefinita è compatibile con xterm.

Per Linux, ogni distribuzione viene fornita con un'applicazione terminale diversa. Consultare la documentazione per la distribuzione per trovare un'applicazione terminale adatta.

$PSStyle

La variabile ha le proprietà seguenti:

  • Reimposta - Disattiva tutte le decorazioni
  • Blink - Attiva Blink
  • BlinkOff - Disattiva Blink
  • Grassetto - Attiva grassetto
  • BoldOff - Disattiva grassetto
  • Nascosto - Attiva nascosta
  • HiddenOff - Disattiva nascosto
  • Inverso - Attiva inverso
  • ReverseOff - Disattiva inverso
  • Corsivo - Attiva corsivo
  • ItalicOff - Disattiva corsivo
  • Sottolineatura - Sottolineatura attiva
  • SottolineaOff - Disattiva la sottolineatura
  • Strike through - Si attiva un attacco
  • Strike throughOff - Disattiva l'attacco
  • OutputRendering - Controllare quando viene usato il rendering dell'output
  • Formattazione - Oggetto annidato che controlla la formattazione predefinita per i flussi di output
  • Avanzamento - Oggetto annidato che controlla il rendering delle barre di stato
  • FileInfo : oggetto annidato per controllare la colorazione degli oggetti FileInfo .
  • Primo piano - Oggetto annidato per controllare la colorazione in primo piano
  • Sfondo - Oggetto annidato per controllare la colorazione dello sfondo

I membri di base restituiscono stringhe di sequenze di escape ANSI mappate ai nomi. I valori sono impostati per consentire la personalizzazione. Ad esempio, è possibile modificare il grassetto in sottolineato. I nomi delle proprietà semplificano la creazione di stringhe decorate usando il completamento della scheda:

"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"

I membri seguenti controllano come o quando viene usata la formattazione ANSI:

  • $PSStyle.OutputRendering è un'enumerazione System.Management.Automation.OutputRendering con i valori:

    • ANSI: le sequenze di escape ANSI vengono sempre passate tramite come è.

      Importante

      È consigliabile usare la modalità ANSI quando si reindirizza l'output a un file o alla pipeline che deve essere eseguita a valle. Ciò garantisce che l'output non sia modificato. L'uso di qualsiasi altra modalità modifica l'output rimuovendo sequenze di escape ANSI, che possono modificare il comportamento di esecuzione.

    • PlainText: le sequenze di escape ANSI vengono sempre rimosse in modo che sia solo testo normale.

    • Host: si tratta del comportamento predefinito. Le sequenze di escape ANSI vengono rimosse dall'output reindirizzato o pipe. Per altre informazioni, vedere Reindirizzamento dell'output.

  • I $PSStyle.Background membri e $PSStyle.Foreground sono stringhe che contengono le sequenze di escape ANSI per i colori della console standard 16.

    • Black
    • BrightBlack
    • White
    • BrightWhite
    • Red
    • BrightRed
    • Magenta
    • BrightMagenta
    • Blue
    • BrightBlue
    • Cyan
    • BrightCyan
    • Green
    • BrightGreen
    • Yellow
    • BrightYellow

    I valori sono impostati e possono contenere qualsiasi numero di sequenze di escape ANSI. Esiste anche un FromRgb() metodo per specificare il colore a 24 bit. Esistono due modi per chiamare il FromRgb() metodo.

    string FromRgb(byte red, byte green, byte blue)
    string FromRgb(int rgb)
    

    Uno degli esempi seguenti imposta il colore di sfondo del colore Beigea 24 bit.

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting è un oggetto annidato per controllare la formattazione predefinita del debug, dell'errore, del verbose, dei messaggi di avviso e delle intestazioni di elenco e tabella. È anche possibile controllare gli attributi come grassetto e sottolineatura. $Host.PrivateData Sostituisce come modo per gestire i colori per il rendering della formattazione. $Host.PrivateData continua a esistere per la compatibilità con le versioni precedenti, ma non è connesso a $PSStyle.Formatting. $PSStyle.Formatting ha i membri seguenti:

    • FormatAccent - Formattazione per gli elementi dell'elenco
    • TableHeader - Formattazione per le intestazioni di tabella
    • ErrorAccent - Formattazione per i metadati degli errori
    • Errore : formattazione dei messaggi di errore
    • Avviso - Formattazione dei messaggi di avviso
    • Dettagliato - formattazione per i messaggi dettagliati
    • Debug - Formattazione per i messaggi di debug
  • $PSStyle.Progress consente di controllare il rendering della barra di visualizzazione dello stato.

    • Stile : stringa ANSI che imposta lo stile di rendering.
    • MaxWidth : imposta la larghezza massima della visualizzazione. Il valore predefinito è 120. Il valore minimo è 18.
    • Visualizzazione : enumerazione con valori Minimal e Classic. Classic è il rendering esistente senza modifiche. Minimal è un rendering minimo di riga singola. Minimal è l'impostazione predefinita.
    • UseOSCIndicator - Impostazione predefinita su $false. Impostare questo valore su $true per i terminali che supportano gli indicatori OSC.

    Nota

    Se l'host non supporta il terminale virtuale, $PSStyle.Progress.View viene impostato automaticamente su Classic.

    Nell'esempio seguente viene impostato lo stile di rendering su una barra di stato minima.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo è un oggetto annidato per controllare la colorazione degli oggetti FileInfo .

    • Directory - Membro predefinito per specificare il colore per le directory
    • SimbolicaLink - Membro predefinito per specificare il colore per i collegamenti simbolici
    • Eseguibile : membro predefinito per specificare il colore per i file eseguibili.
    • Estensione : usare questo membro per definire i colori per le diverse estensioni di file. Il membro estensione include le estensioni per l'archiviazione e i file di PowerShell.

Cmdlet che generano l'output ANSI

  • I cmdlet markdown: il cmdlet Show-Markdown visualizza il contenuto di un file contenente il testo markdown. L'output viene eseguito tramite sequenze ANSI per rappresentare stili diversi. È possibile gestire le definizioni degli stili usando i cmdlet Get-MarkdownOption e Set-MarkdownOption .
  • Cmdlet PSReadLine: il modulo PSReadLine usa sequenze ANSI per colorizzare gli elementi della sintassi di PowerShell nella riga di comando. I colori possono essere gestiti usando Get-PSReadLineOption e Set-PSReadLineOption.
  • Get-Error - Il cmdlet Get-Error restituisce una visualizzazione dettagliata di un oggetto Error , formattato per semplificare la lettura.
  • Select-String - A partire da PowerShell 7.0, Select-String usa sequenze ANSI per evidenziare i modelli corrispondenti nell'output.
  • Write-Progress - L'output ANSI viene gestito usando $PSStyle.Progress, come descritto in precedenza. Per altre informazioni, vedere Write-Progress

Reindirizzamento dell'output in Host modalità

Per impostazione predefinita, $PSStyle.OutputRendering è un set su Host. Le sequenze di escape ANSI vengono rimosse dall'output reindirizzato o pipe.

OutputRendering si applica solo al rendering nell'host, Out-File, e Out-String. L'output da eseguibili nativi non è interessato.

PowerShell 7.2.6 ha modificato il comportamento di Out-File e Out-String per gli scenari seguenti:

  • Quando l'oggetto di input è una stringa pura, questi cmdlet mantengono invariata la stringa indipendentemente dall'impostazione OutputRendering .
  • Quando l'oggetto di input deve avere una visualizzazione di formattazione applicata, questi cmdlet mantengono o rimuoveno sequenze di escape dalle stringhe di output di formattazione in base all'impostazione OutputRendering .

Si tratta di una modifica di rilievo in questi cmdlet rispetto a PowerShell 7.2.

OutputRendering non si applica all'output dal processo host di PowerShell, ad esempio quando si esegue pwsh da una riga di comando e reindirizza l'output.

Nell'esempio seguente PowerShell viene eseguito in Linux da bash. Il Get-ChildItem cmdlet produce testo con decorazione ANSI. Poiché il reindirizzamento si verifica nel processo, all'esterno dell'host bash di PowerShell, l'output non è interessato da OutputRendering.

pwsh -noprofile -command 'Get-Childitem' > out.txt

Quando si esamina il contenuto delle sequenze di out.txt escape ANSI.

Al contrario, quando si verifica il reindirizzamento all'interno della sessione di PowerShell, OutputRendering influisce sull'output reindirizzato.

pwsh -noprofile -command 'Get-Childitem > out.txt'

Quando si esamina il contenuto di non sono presenti sequenze di out.txt escape ANSI.

Disabilitazione dell'output ANSI

È possibile disattivare il supporto per le sequenze di escape ANSI usando term o NO_COLOR variabili di ambiente.

I valori seguenti modificano $env:TERM il comportamento come segue:

  • dumb -Imposta $Host.UI.SupportsVirtualTerminal = $false
  • xterm-mono -Imposta $PSStyle.OutputRendering = PlainText
  • xtermm -Imposta $PSStyle.OutputRendering = PlainText

Se $env:NO_COLOR esiste, $PSStyle.OutputRendering è impostato su PlainText. Per altre informazioni sulla variabile di ambiente NO_COLOR , vedere https://no-color.org/.

Uso $PSStyle da C#

Gli sviluppatori C# possono accedere PSStyle come singleton, come illustrato nell'esempio seguente:

string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";

PSStyle esiste nello spazio dei nomi System.Management.Automation.

Il motore di PowerShell include le modifiche seguenti:

  • Il sistema di formattazione di PowerShell viene aggiornato per rispettare $PSStyle.OutputRendering.
  • Il StringDecorated tipo viene aggiunto per gestire stringhe di escape ANSI.
  • La string IsDecorated proprietà booleana è stata aggiunta per restituire true quando la stringa contiene ESC o C1 CSI sequenze di caratteri.
  • La Length proprietà di una stringa restituisce la lunghezza del testo senza le sequenze di escape ANSI.
  • Il StringDecorated Substring(int contentLength) metodo restituisce una sottostringa a partire dall'indice 0 fino alla lunghezza del contenuto che non fa parte delle sequenze di escape ANSI. Questa operazione è necessaria per la formattazione della tabella per troncare le stringhe e mantenere sequenze di escape ANSI che non occupano lo spazio dei caratteri stampabile.
  • Il string ToString() metodo rimane invariato e restituisce la versione di testo non crittografato della stringa.
  • Il string ToString(bool Ansi) metodo restituisce la stringa incorporata ANSI non elaborata se il Ansi parametro è true. In caso contrario, viene restituita una versione di testo non crittografato con sequenze di escape ANSI.
  • Il FormatHyperlink(string text, uri link) metodo restituisce una stringa contenente sequenze di escape ANSI usate per decorare i collegamenti ipertestuali. Alcuni host del terminale, ad esempio il Terminale Windows, supportano questo markup, che rende il testo di rendering selezionabile nel terminale.

Vedi anche