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, $PSStyle
e 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'enumerazioneSystem.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 suPlainText
, 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 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 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 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 non sono effettivamente proprietà nell'oggetto
- 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
eClassic
.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 suClassic
.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-File
e 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 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 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 ilAnsi
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