about_ANSI_Terminals

Descrizione breve

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, $PSStylee le modifiche apportate al motore di PowerShell per supportare l'output di testo decorato con 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 della console di Windows è compatibile con xterm. Anche l'applicazione Terminale Windows è compatibile 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 relativa alla distribuzione per trovare un'applicazione terminale appropriata.

$PSStyle

La variabile ha le proprietà seguenti:

  • Reimposta - Disattiva tutte le decorazioni
  • Blink - Attiva blink
  • BlinkOff - Disattiva il lampeggiamento
  • Grassetto : attiva il grassetto
  • BoldOff - Disattiva il grassetto
  • Dim - Attiva dim (aggiunta in PowerShell 7.4)
  • DimOff - Disattiva dim (aggiunta in PowerShell 7.4)
  • Nascosto : attiva l'attivazione nascosta
  • HiddenOff - Disattiva la funzionalità nascosta
  • Inverso - Attiva inverso
  • ReverseOff - Disattiva l'inversione
  • Corsivo - Attiva corsivo
  • ItalicOff - Disattiva corsivo
  • Sottolineatura - Attiva la sottolineatura
  • UnderlineOff - Disattiva la sottolineatura
  • Barrato - Si trasforma in sciopero
  • StrikethroughOff - Disattiva il colpo
  • OutputRendering - Controllare quando viene usato il rendering dell'output
  • Formattazione - Oggetto annidato che controlla la formattazione predefinita per i flussi di output
  • Stato - 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 relativi nomi. I valori sono impostabili 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 così come sono.

      Importante

      È consigliabile usare la modalità ANSI per reindirizzare l'output a un file o alla pipeline che deve essere eseguita downstream. In questo modo si garantisce che l'output non venga 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. Nelle sessioni remote, se l'host remoto è impostato su PlainText, l'output viene rimosso dalle sequenze di escape ANSI prima di inviarlo al client locale.

    • Host: si tratta del comportamento predefinito. Le sequenze di escape ANSI vengono rimosse dall'output reindirizzato o inviato tramite 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 16 colori della console standard.

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

    I valori sono impostabili e possono contenere un numero qualsiasi di sequenze di escape ANSI. Esiste anche un metodo per specificare il FromRgb() 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 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 di debug, errore, dettagliato, messaggi di avviso e intestazioni di elenco e tabella. È anche possibile controllare attributi come il grassetto e la 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
    • ErrorAccent - Formattazione per i metadati degli errori
    • Errore - Formattazione per i messaggi di errore
    • Avviso : formattazione per i messaggi di avviso
    • Dettagliato: formattazione per i messaggi dettagliati
    • Debug : formattazione per i messaggi di debug
    • TableHeader - Formattazione per le intestazioni di tabella
    • CustomTableHeaderLabel : formattazione per le intestazioni di tabella che sono valori calcolati
    • FeedbackName : formattazione per il nome del provider di commenti e suggerimenti (aggiunta come funzionalità sperimentale in PowerShell 7.4)
    • FeedbackText : formattazione per i messaggi di feedback (aggiunta come funzionalità sperimentale in PowerShell 7.4)
    • FeedbackAction : formattazione per le azioni suggerite dal provider di feedback (aggiunta come funzionalità sperimentale in PowerShell 7.4)
  • $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.
    • View : enumerazione con valori Minimal e Classic. Classic è il rendering esistente senza modifiche. Minimal è un rendering minimo a riga singola. Minimal è l'impostazione predefinita.
    • UseOSCIndicator : il valore predefinito è $false. Impostare questa opzione 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 lo stile di rendering viene impostato su un indicatore di stato minimo.

    $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
    • SymbolicLink - 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 estensioni di file diverse. Il membro extension include le estensioni per i file di archiviazione e PowerShell.

Cmdlet che generano l'output ANSI

  • I cmdlet markdown: il cmdlet Show-Markdown visualizza il contenuto di un file contenente testo markdown. Il rendering dell'output viene eseguito usando 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 colorare 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 valore impostato su Host. Le sequenze di escape ANSI vengono rimosse dall'output reindirizzato o inviato tramite pipe.

OutputRendering si applica solo al rendering in Host, Out-Filee Out-String. L'output dei file 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 all'oggetto di input deve essere applicata una visualizzazione di formattazione, questi cmdlet mantengono o rimuovono le 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 del processo host di PowerShell, ad esempio quando si esegue pwsh da una riga di comando e si reindirizza l'output.

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

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

Quando si esamina il contenuto di vengono visualizzate le sequenze di out.txt escape ANSI.

Al contrario, quando il reindirizzamento si verifica 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

Il supporto per le sequenze di escape ANSI può essere disattivato tramite TERM o NO_COLOR variabili di ambiente.

I valori seguenti per modificare il comportamento come indicato di $env:TERM seguito:

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

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

Uso da $PSStyle 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 con 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 spazio caratteri stampabile.
  • Il string ToString() metodo rimane invariato e restituisce la versione in 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 rimosse.
  • Il FormatHyperlink(string text, uri link) metodo restituisce una stringa contenente sequenze di escape ANSI utilizzate per decorare i collegamenti ipertestuali. Alcuni host del terminale, ad esempio il Terminale Windows, supportano questo markup, che rende il testo sottoposto a rendering selezionabile nel terminale.

Metodi statici della classe PSStyle

PowerShell 7.4 aggiunge tre nuovi metodi statici alla [System.Management.Automation.PSStyle] classe .

[System.Management.Automation.PSStyle] | Get-Member -Static -MemberType Method
   TypeName: System.Management.Automation.PSStyle

Name                               MemberType Definition
----                               ---------- ----------
Equals                             Method     static bool Equals(System.Object objA, System.Object objB)
MapBackgroundColorToEscapeSequence Method     static string MapBackgroundColorToEscapeSequence(System.ConsoleColor bac…
MapColorPairToEscapeSequence       Method     static string MapColorPairToEscapeSequence(System.ConsoleColor foregroun…
MapForegroundColorToEscapeSequence Method     static string MapForegroundColorToEscapeSequence(System.ConsoleColor for…
ReferenceEquals                    Method     static bool ReferenceEquals(System.Object objA, System.Object objB)

Questi metodi consentono di convertire i valori ConsoleColor in sequenze di escape ANSI per i colori di primo piano e di sfondo o per una combinazione di entrambi.

Negli esempi seguenti vengono mostrate le sequenze di escape ANSI generate da questi metodi.

using namespace System.Management.Automation
[PSStyle]::MapBackgroundColorToEscapeSequence('Black') | Format-Hex
   Label: String (System.String) <3A04954D>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 1B 5B 34 30 6D                                  �[40m
[PSStyle]::MapForegroundColorToEscapeSequence('Red') | Format-Hex
   Label: String (System.String) <38B50F41>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 1B 5B 39 31 6D                                  �[91m
[PSStyle]::MapColorPairToEscapeSequence('Red','Black') | Format-Hex
   Label: String (System.String) <365A5875>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 1B 5B 39 31 3B 34 30 6D                         �[91;40m

Vedi anche