about_ANSI_Terminals
Description courte
Décrit la prise en charge disponible pour les séquences d’échappement ANSI dans PowerShell.
Description longue
PowerShell a de nombreuses fonctionnalités qui prennent en charge l’utilisation de séquences d’échappement ANSI pour contrôler le rendu de la sortie dans l’application terminale qui héberge PowerShell.
PowerShell 7.2 a ajouté une nouvelle variable automatique, $PSStyle
et les modifications apportées au moteur PowerShell pour prendre en charge la sortie du texte décoré ANSI.
Prise en charge du terminal ANSI
Les fonctionnalités ANSI sont conçues pour être compatibles avec les terminaux xterm. Pour plus d’informations, consultez xterm dans Wikipédia.
Sur Windows 10 et versions ultérieures, l’hôte de console Windows est compatible xterm. L’application Terminal Windows est également compatible xterm.
Sur macOS, l’application terminale par défaut est compatible xterm.
Pour Linux, chaque distribution est fournie avec une application terminale différente. Consultez la documentation de votre distribution pour trouver une application de terminal appropriée.
$PSStyle
La variable a les propriétés suivantes :
- Réinitialiser - Désactive toutes les décorations
- Clignotement : active Blink
- BlinkOff - Désactive Blink
- Gras - Active la mise en gras
- BoldOff - Désactive la mise en gras
- Dim - Active Dim (ajouté dans PowerShell 7.4)
- DimOff - Désactive Dim (ajouté dans PowerShell 7.4)
- Masqué - Active masqué
- HiddenOff - Désactive masqué
- Inverse : active l’option Inverse
- ReverseOff - Désactive l’option Inverse
- Italique - Active italique
- ItalicOff - Désactive italique
- Soulignement - Active le sous-sol
- Soulignement - Désactive la mise en évidence
- Strikethrough - Active l’attaque
- StrikethroughOff - Active l’arrêt
- OutputRendering : contrôle lorsque le rendu de sortie est utilisé
- Mise en forme : objet imbriqué qui contrôle la mise en forme par défaut pour les flux de sortie
- Progression - Objet imbriqué qui contrôle le rendu des barres de progression
- FileInfo - Objet imbriqué pour contrôler la coloration des objets FileInfo .
- Premier plan - Objet imbriqué pour contrôler la coloration de premier plan
- Arrière-plan - Objet imbriqué pour contrôler la coloration d’arrière-plan
Les membres de base retournent des chaînes de séquences d’échappement ANSI mappées à leurs noms. Les valeurs peuvent être définies de façon à autoriser la personnalisation. Par exemple, vous pouvez modifier la mise en gras en soulignement. Les noms de propriétés facilitent la création de chaînes décorées à l’aide de la saisie semi-automatique de tabulation :
"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
Les membres suivants contrôlent comment ou quand la mise en forme ANSI est utilisée :
$PSStyle.OutputRendering
est uneSystem.Management.Automation.OutputRendering
énumération avec les valeurs :ANSI
: les séquences d’échappement ANSI sont toujours passées en l’objet.Important
Vous devez utiliser le mode ANSI lors de la redirection de la sortie vers un fichier ou le pipeline destiné à être exécuté en aval. Cela garantit que la sortie n’est pas modifiée. L’utilisation d’un autre mode modifie la sortie en supprimant les séquences d’échappement ANSI, ce qui peut modifier le comportement d’exécution.
PlainText
: les séquences d’échappement ANSI sont toujours supprimées afin qu’il s’agit uniquement de texte brut. Dans les sessions à distance, si l’hôte distant est définiPlainText
sur , la sortie est supprimée des séquences d’échappement ANSI avant de le renvoyer au client local.Host
: il s’agit du comportement par défaut. Les séquences d’échappement ANSI sont supprimées de la sortie redirigée ou redirigée. Pour plus d’informations, consultez La sortie de redirection.
Les
$PSStyle.Background
membres et$PSStyle.Foreground
les chaînes contiennent les séquences d’échappement ANSI pour les 16 couleurs de la console standard.Black
BrightBlack
White
BrightWhite
Red
BrightRed
Magenta
BrightMagenta
Blue
BrightBlue
Cyan
BrightCyan
Green
BrightGreen
Yellow
BrightYellow
Les valeurs sont settables et peuvent contenir n’importe quel nombre de séquences d’échappement ANSI. Il existe également une
FromRgb()
méthode pour spécifier une couleur 24 bits. Il existe deux façons d’appeler laFromRgb()
méthode.string FromRgb(byte red, byte green, byte blue) string FromRgb(int rgb)
L’un des exemples suivants définit la couleur d’arrière-plan de la couleur
Beige
24 bits .$PSStyle.Background.FromRgb(245, 245, 220) $PSStyle.Background.FromRgb(0xf5f5dc)
$PSStyle.Formatting
est un objet imbriqué pour contrôler la mise en forme par défaut de débogage, d’erreur, de commentaires, de messages d’avertissement et de liste et d’en-têtes de tableau. Vous pouvez également contrôler les attributs tels que la mise en gras et la mise en surlination. Il remplace le mode de gestion des$Host.PrivateData
couleurs pour le rendu de mise en forme.$Host.PrivateData
continue d’exister pour la compatibilité descendante, mais n’est pas connecté à$PSStyle.Formatting
.$PSStyle.Formatting
possède les membres suivants :- FormatAccent : mise en forme pour les éléments de liste
- ErrorAccent : mise en forme pour les métadonnées d’erreur
- Erreur : mise en forme des messages d’erreur
- Avertissement : mise en forme des messages d’avertissement
- Détaillé : mise en forme pour les messages détaillés
- Débogage : mise en forme des messages de débogage
- TableHeader : mise en forme pour les en-têtes de tableau
- CustomTableHeaderLabel : mise en forme pour les en-têtes de tableau qui sont des valeurs calculées
- FeedbackName : mise en forme du nom du fournisseur de commentaires (ajoutée en tant que fonctionnalité expérimentale dans PowerShell 7.4)
- FeedbackText : mise en forme des messages de commentaires (ajoutée en tant que fonctionnalité expérimentale dans PowerShell 7.4)
- FeedbackAction : mise en forme pour les actions suggérées par le fournisseur de commentaires (ajoutée en tant que fonctionnalité expérimentale dans PowerShell 7.4)
$PSStyle.Progress
vous permet de contrôler le rendu de la barre d’affichage de progression.- Style : chaîne ANSI définissant le style de rendu.
- MaxWidth : définit la largeur maximale de la vue. La valeur par défaut est
120
. La valeur minimale est 18. - Affichage - Énumération avec des valeurs et
Minimal
Classic
.Classic
est le rendu existant sans modification.Minimal
est le rendu minimal à une seule ligne.Minimal
est la valeur par défaut. - UseOSCIndicator : valeur par défaut
$false
. Définissez cette valeur$true
pour les terminaux qui prennent en charge les indicateurs OSC.
Remarque
Si l’hôte ne prend pas en charge le terminal virtuel,
$PSStyle.Progress.View
est automatiquement défini surClassic
.L’exemple suivant définit le style de rendu sur une barre de progression minimale.
$PSStyle.Progress.View = 'Minimal'
$PSStyle.FileInfo
est un objet imbriqué pour contrôler la coloration des objets FileInfo .- Répertoire - Membre intégré pour spécifier la couleur des répertoires
- SymbolLink - Membre intégré pour spécifier la couleur des liens symboliques
- Exécutable : membre intégré pour spécifier la couleur des exécutables.
- Extension : utilisez ce membre pour définir des couleurs pour différentes extensions de fichier. Le membre Extension préintègre des extensions pour les fichiers d’archive et PowerShell.
Applets de commande qui génèrent une sortie ANSI
- Les applets de commande Markdown : l’applet de commande Show-Markdown affiche le contenu d’un fichier contenant du texte markdown. La sortie est rendue à l’aide de séquences ANSI pour représenter différents styles. Vous pouvez gérer les définitions des styles à l’aide des applets de commande Get-MarkdownOption et Set-MarkdownOption .
- Applets de commande PSReadLine : le module PSReadLine utilise des séquences ANSI pour coloriser les éléments de syntaxe PowerShell sur la ligne de commande. Les couleurs peuvent être gérées à l’aide de Get-PSReadLineOption et de Set-PSReadLineOption.
Get-Error
- l’applet de commande Get-Error retourne une vue détaillée d’un objet Error , mis en forme pour faciliter la lecture.Select-String
- À compter de PowerShell 7.0, Select-String utilise des séquences ANSI pour mettre en évidence les modèles correspondants dans la sortie.Write-Progress
- La sortie ANSI est gérée à l’aide$PSStyle.Progress
, comme décrit ci-dessus. Pour plus d’informations, consultez Write-Progress
Redirection de la sortie en Host
mode
Par défaut, $PSStyle.OutputRendering
est défini sur Host. Les séquences d’échappement ANSI sont supprimées de la sortie redirigée ou redirigée.
OutputRendering s’applique uniquement au rendu dans l’hôte, Out-File
et Out-String
. La sortie des exécutables natifs n’est pas affectée.
PowerShell 7.2.6 a modifié le comportement et Out-File
Out-String
pour les scénarios suivants :
- Lorsque l’objet d’entrée est une chaîne pure, ces applets de commande conservent la chaîne inchangée, quel que soit le paramètre OutputRendering .
- Lorsque l’objet d’entrée doit avoir une vue de mise en forme appliquée à celui-ci, ces applets de commande conservent ou suppriment les séquences d’échappement des chaînes de sortie de mise en forme en fonction du paramètre OutputRendering .
Il s’agit d’un changement cassant dans ces applets de commande par rapport à PowerShell 7.2.
OutputRendering ne s’applique pas à la sortie du processus hôte PowerShell, par exemple lorsque vous exécutez pwsh
à partir d’une ligne de commande et redirigez la sortie.
Dans l’exemple suivant, PowerShell est exécuté sur Linux à partir de bash
. L’applet Get-ChildItem
de commande produit du texte décoré ANSI. Étant donné que la redirection se produit dans le bash
processus, en dehors de l’hôte PowerShell, la sortie n’est pas affectée par OutputRendering.
pwsh -noprofile -command 'Get-Childitem' > out.txt
Lorsque vous inspectez le contenu des out.txt
séquences d’échappement ANSI.
En revanche, lorsque la redirection se produit dans la session PowerShell, OutputRendering affecte la sortie redirigée.
pwsh -noprofile -command 'Get-Childitem > out.txt'
Lorsque vous inspectez le contenu de l’absence de out.txt
séquences d’échappement ANSI.
Désactivation de la sortie ANSI
La prise en charge des séquences d’échappement ANSI peut être désactivée avec les variables d’environnement TERM ou NO_COLOR.
Les valeurs suivantes de $env:TERM
modifient le comportement comme suit :
dumb
-Studios$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-Studios$PSStyle.OutputRendering = PlainText
xtermm
-Studios$PSStyle.OutputRendering = PlainText
S’il $env:NO_COLOR
existe, la $PSStyle.OutputRendering
valeur PlainText est définie sur PlainText. Pour plus d’informations sur la variable d’environnement NO_COLOR, consultez https://no-color.org/.
Utilisation $PSStyle
de C#
Les développeurs C# peuvent accéder PSStyle
en tant que singleton, comme illustré dans l’exemple suivant :
string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";
PSStyle
existe dans l’espace de noms System.Management.Automation.
Le moteur PowerShell comprend les modifications suivantes :
- Le système de mise en forme de PowerShell est mis à jour pour respecter
$PSStyle.OutputRendering
. - Le
StringDecorated
type est ajouté pour gérer les chaînes d’échappement ANSI. - La
string IsDecorated
propriété booléenne a été ajoutée pour retourner true lorsque la chaîne contient ouC1 CSI
desESC
séquences de caractères. - La
Length
propriété d’une chaîne retourne la longueur du texte sans séquences d’échappement ANSI. - La
StringDecorated Substring(int contentLength)
méthode retourne une sous-chaîne commençant à l’index 0 jusqu’à la longueur du contenu qui ne fait pas partie des séquences d’échappement ANSI. C’est nécessaire pour que la mise en forme de la table tronque les chaînes et conserve les séquences d’échappement ANSI qui n’occupent pas un espace de caractère imprimable. - La
string ToString()
méthode reste la même et retourne la version en texte clair de la chaîne. - La
string ToString(bool Ansi)
méthode retourne la chaîne incorporée ANSI brute si le paramètre a laAnsi
valeur true. Dans le cas contraire, une version en texte en clair avec des séquences d’échappement ANSI supprimées est retournée. - La
FormatHyperlink(string text, uri link)
méthode retourne une chaîne contenant des séquences d’échappement ANSI utilisées pour décorer les liens hypertexte. Certains hôtes de terminal, comme le Terminal Windows, prennent en charge ce balisage, ce qui permet de cliquer sur le texte rendu dans le terminal.
Méthodes statiques de la classe PSStyle
PowerShell 7.4 ajoute trois nouvelles méthodes statiques à la [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)
Ces méthodes permettent de convertir des valeurs ConsoleColor en séquences d’échappement ANSI pour les couleurs de premier plan et d’arrière-plan ou pour une combinaison des deux.
Les exemples suivants montrent les séquences d’échappement ANSI produites par ces méthodes.
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