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'enumerazioneSystem.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 ilFromRgb()
metodo.string FromRgb(byte red, byte green, byte blue) string FromRgb(int rgb)
Uno degli esempi seguenti imposta il colore di sfondo del colore
Beige
a 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
eClassic
.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 suClassic
.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 contieneESC
oC1 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 ilAnsi
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.