about_ANSI_Terminals
Description courte
Décrit la prise en charge disponible pour les séquences d’échappement ANSI dans PowerShell.
Description longue
PowerShell offre 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 des modifications 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 terminal différente. Consultez la documentation de votre distribution pour trouver une application terminale appropriée.
$PSStyle
La variable a les propriétés suivantes :
- Réinitialiser : désactive toutes les décorations
- Blink : active Blink
- BlinkOff : désactive Blink
- Gras : active la mise en gras
- BoldOff : désactive la fonction Gras
- Masqué : active Masqué
- HiddenOff : désactive masqué
- Inverser : active l’option Inverser
- ReverseOff : désactive l’option Reverse
- Italique - Devient italique sur
- ItalicOff - Désactive l’italique
- Soulignement - Met en évidence
- UnderlineOff : désactive la mise en évidence
- Barré : active le barré
- StrikethroughOff : désactive l’action
- OutputRendering : contrôler quand le rendu de sortie est utilisé
- Mise en forme : objet imbriqué qui contrôle la mise en forme par défaut des 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 remplacer gras par souligné. Les noms de propriétés vous permettent de créer plus facilement des chaînes décorées à l’aide de la saisie semi-automatique par 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 unSystem.Management.Automation.OutputRendering
enum avec les valeurs :ANSI
: les séquences d’échappement ANSI sont toujours passées par l’intermédiaire de l’emplacement.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 de tout 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 dépouillées de sorte qu’il ne s’agit que de texte brut.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 Redirection de la sortie.
Les
$PSStyle.Background
membres et$PSStyle.Foreground
sont des chaînes qui contiennent les séquences d’échappement ANSI pour les 16 couleurs de console standard.Black
BrightBlack
White
BrightWhite
Red
BrightRed
Magenta
BrightMagenta
Blue
BrightBlue
Cyan
BrightCyan
Green
BrightGreen
Yellow
BrightYellow
Les valeurs sont définissables et peuvent contenir n’importe quel nombre de séquences d’échappement ANSI. Il existe également une
FromRgb()
méthode pour spécifier la 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 24 bits
Beige
.$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 des en-têtes de débogage, d’erreur, de commentaires, d’avertissement et de liste. Vous pouvez également contrôler des attributs tels que la mise en gras et le soulignement. Il remplace comme méthode de gestion des$Host.PrivateData
couleurs pour la mise en forme du rendu.$Host.PrivateData
continue d’exister pour la compatibilité descendante, mais n’est pas connecté à$PSStyle.Formatting
.$PSStyle.Formatting
a les membres suivants :- FormatAccent : mise en forme des éléments de liste
- TableHeader : mise en forme des en-têtes de tableau
- ErrorAccent : mise en forme des métadonnées d’erreur
- Erreur : mise en forme des messages d’erreur
- Avertissement : mise en forme des messages d’avertissement
- Verbose : mise en forme des messages détaillés
- Débogage : mise en forme des messages de débogage
$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,
Minimal
etClassic
.Classic
est le rendu existant sans modification.Minimal
est le rendu minimal à une seule ligne.Minimal
est la valeur par défaut. - UseOSCIndicator : la valeur par défaut est
$false
. Définissez cette valeur$true
sur pour les terminaux qui prennent en charge les indicateurs OSC.
Notes
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
- SymbolicLink : 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
- 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 Set-PSReadLineOption.
Get-Error
- L’applet de commande Get-Error renvoie une vue détaillée d’un objet Error , mise en forme pour faciliter la lecture.Select-String
- À compter de PowerShell 7.0, Select-String utilise des séquences ANSI pour mettre en surbrillance les modèles correspondants dans la sortie.Write-Progress
- La sortie ANSI est gérée à l’aide de$PSStyle.Progress
, comme décrit ci-dessus. Pour plus d’informations, consultez Progression de l’écriture
Redirection de la sortie en Host
mode
Par défaut, $PSStyle.OutputRendering
est défini sur Hôte. 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 de Out-File
et 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 a besoin d’une vue de mise en forme, 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é par 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 de vous voyez les séquences d’échappement out.txt
ANSI.
En revanche, lorsque la redirection se produit au sein de la session PowerShell, OutputRendering affecte la sortie redirigée.
pwsh -noprofile -command 'Get-Childitem > out.txt'
Lorsque vous inspectez le contenu, il n’existe aucune séquence d’échappement out.txt
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, $PSStyle.OutputRendering
est défini sur PlainText. Pour plus d’informations sur la variable d’environnement NO_COLOR , consultez https://no-color.org/.
Utilisation $PSStyle
à partir 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 inclut 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 contientESC
ouC1 CSI
des séquences de caractères. - La
Length
propriété d’une chaîne retourne la longueur du texte sans les 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.