Share via


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 un System.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 la FromRgb() 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 et Classic. 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 sur Classic.

    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 contient ESC ou C1 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 la Ansi 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.

Voir aussi