Pourquoi PowerShell n’affiche-t-il pas correctement le texte “DarkYellow”?

J’utilise l’applet de commande Write-Host pour changer la couleur de mon invite et j’ai remarqué que la couleur DarkYellow n’était pas affichée en jaune, mais en gris! Voici un test de toutes les couleurs

 PS> 0..15 | %{ Write-Host "Hello, world!" -ForegroundColor $_ } 

J’ai une liste de toutes les valeurs enum en utilisant une mauvaise valeur

 PS> Write-Host "Hello, World!" -ForegroundColor foo 

Noir, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gris, DarkGray, Bleu, Vert, Cyan, Rouge, Magenta, Jaune, Blanc

Et j’ai réalisé que cette liste de “couleurs de la console” correspond en quelque sorte aux parameters de cette fenêtre de console / raccourci, non? Donc, DarkYellow serait ce 7ème dans et il a l’air gris.

entrer la description de l'image ici

Quelle est la connexion entre ForegroundColor , System.ConsoleColor et ces parameters de raccourci de console? Pourquoi le jaune foncé s’affiche-t-il en gris “hors de la boîte”? Devrais-je le changer? Est-ce que cela changera chaque console de mon système ou simplement ce raccourci?

Pourquoi les consoles sont-elles si fines sur Windows?


Je suis sur Windows 7 Pro SP1 64 bits et je lance le raccourci “Windows PowerShell” depuis le menu Démarrer.

Le blog de Lee Holmes, Noble Blue de PowerShell , en parle un peu, mais n’explique pas vraiment pourquoi DarkYellow a été modifié. Très probablement, le DarkYellow par défaut était illisible avec le fond bleu.

Comme vous l’avez probablement compris – System.ConsoleColor est légèrement mal nommé car il ne spécifie pas de couleur, il spécifie un index dans une table de couleurs qui peut être modifiée par des raccourcis. Ceci est malheureusement une limitation du sous-système de la console.

Si vous modifiez le raccourci PowerShell.lnk, vous ne modifiez les couleurs que pour vous-même et uniquement lorsque vous démarrez PowerShell à partir de ce lien. Si vous utilisez Start | Exécutez, ou lancez cmd, puis exécutez PowerShell à partir de cmd, vous obtiendrez des parameters différents.

Le blog de Lee devrait vous donner suffisamment d’indices pour obtenir le comportement que vous préférez.

Je n’ai pas les réponses exactes, mais j’ai quelque chose comme ça! J’ai fait des recherches (merci, Jason Shirk) et constaté que System.ConsoleColor est juste un index dans la table de couleurs, qui doit être représenté par ceci

entrer la description de l'image ici

La documentation mentionne que DarkYellow est supposé être ” ocre ” (RVB: 204, 119, 34).

 | DarkYellow | The color dark yellow (ochre). | 

Choisissez “Défaut” dans le menu de la fenêtre en haut à gauche de l’application et vous verrez le générique “Propriétés de la console Windows” (comme ci-dessus), qui modifiera toute fenêtre de type ConsoleWindowClass .

Choisissez l’option “Texte d’écran” et vous remarquerez qu’il est configuré pour utiliser la valeur dans l’ DarkYellow de DarkYellow . Je ne sais pas pourquoi ils n’ont pas utilisé Gray ou DarkGray juste à côté! Cliquez sur la 7ème case (l’index pour DarkYellow ) et changez-la en valeur RVB. Ensuite, définissez le “Texte d’écran” sur Gray ou DarkGray (sauf si vous voulez vraiment un texte de premier plan ocre par défaut).

Toutes vos consoles Invite de commandes, PowerShell et Git Bash (mingw) seront modifiées (les miennes étaient).


J’ai eu un petit problème avec l’invite PowerShell dans la boîte de dialog “Exécuter”. Il a fallu les couleurs, mais pas certains de mes autres parameters (taille physique et taille du tampon, etc.). J’ai fini par utiliser scoop pour installer concfg

 PS> scoop install concfg PS> scoop install sudo 

et exporté mes bons parameters de console

 PS> concfg export > ~\.consolerc 

et les a importés dans mon message incohérent avec des préjugés (vous pouvez utiliser sudo , également à partir de scoop, ou simplement lancer une invite d’administration)

 PS> sudo concfg import ~\.consolerc 

Et, en fait, concfg semblait exporter tout, les valeurs de la table de couleurs et les sélections! Voici un dump partiel de ma configuration (les parties de couleur)

 { "popup_colors": "cyan,white", "dark_gray": "#808080", "screen_colors": "gray,dark_magenta", "dark_green": "#008000", "blue": "#0000ff", "dark_yellow": "#cc7722", "red": "#ff0000", "magenta": "#ff00ff", "dark_red": "#800000", "yellow": "#ffff00", "dark_magenta": "#012456", "cyan": "#00ffff", "green": "#00ff00", "dark_blue": "#000080", "gray": "#c0c0c0", "white": "#ffffff", "black": "#000000", "dark_cyan": "#008080" }