Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Brève description
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.OutputRenderingest 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éfiniPlainTextsur , 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.Backgroundmembres et$PSStyle.Foregroundles chaînes contiennent les séquences d’échappement ANSI pour les 16 couleurs de la console standard.BlackBrightBlackWhiteBrightWhiteRedBrightRedMagentaBrightMagentaBlueBrightBlueCyanBrightCyanGreenBrightGreenYellowBrightYellow
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
Beige24 bits .$PSStyle.Background.FromRgb(245, 245, 220) $PSStyle.Background.FromRgb(0xf5f5dc)$PSStyle.Formattingest 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.PrivateDatacouleurs pour le rendu de mise en forme.$Host.PrivateDatacontinue d’exister pour la compatibilité descendante, mais n’est pas connecté à$PSStyle.Formatting.$PSStyle.Formattingpossè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 ne sont pas réellement des propriétés sur l’objet
- 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.Progressvous 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.Classicest le rendu existant sans modification.Minimalest le rendu minimal à une seule ligne.Minimalest la valeur par défaut. -
UseOSCIndicator : valeur par défaut
$false. Définissez cette valeur$truepour les terminaux qui prennent en charge les indicateurs OSC.
Remarque
Si l’hôte ne prend pas en charge le terminal virtuel,
$PSStyle.Progress.Viewest automatiquement défini surClassic.L’exemple suivant définit le style de rendu sur une barre de progression minimale.
$PSStyle.Progress.View = 'Minimal'$PSStyle.FileInfoest 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 d’extension prédéfini les couleurs des extensions de fichier Archive et PowerShell.
L’exemple suivant montre comment modifier les couleurs des différents
FileInfoparamètres et extensions de fichier spécifiques. Les couleurs sont choisies pour fonctionner correctement sur un arrière-plan de terminal clair.$PSStyle.FileInfo.Directory = $PSStyle.Background.FromRgb(0x2f6aff) + $PSStyle.Foreground.BrightWhite $PSStyle.FileInfo.SymbolicLink = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Executable = $PSStyle.Foreground.BrightMagenta $PSStyle.FileInfo.Extension['.ps1'] = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Extension['.ps1xml'] = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Extension['.psd1'] = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Extension['.psm1'] = $PSStyle.Foreground.Cyan
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 mode hôte
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 -
xterm-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
StringDecoratedtype est ajouté pour gérer les chaînes d’échappement ANSI. - La
string IsDecoratedpropriété booléenne a été ajoutée pour retourner true lorsque la chaîne contient ouESCdesC1 CSIséquences de caractères. - La
Lengthproprié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 laAnsivaleur 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