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, $PSStyleet 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 une System.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éfini PlainTextsur , 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 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 de la couleur Beige24 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 MinimalClassic. 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 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
    • 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-Fileet Out-String. La sortie des exécutables natifs n’est pas affectée.

PowerShell 7.2.6 a modifié le comportement et Out-FileOut-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 ou C1 CSI des ESC 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 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.

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

Voir aussi