Comment coloriser l'invite Powershell?

17

Je fais toujours mon invite à être de cette couleur dans mon linux Ensuite, je peux trouver mon entrée dans la fenêtre de commande noire. Mais pouvons-nous faire la même couleur dans ma Powershell ?

Yo de
la source
Quelle est la police de la console?
Dmitry Kudriavtsev
@DmitryKudriavtsev Regardez ça , c'est peut-être la chanson Sim en anglais.
il y a
C'est peut-être SimSun?
Dmitry Kudriavtsev
@DmitryKudriavtsev Oui, désolé, je fais une erreur.
il y a
pas de ta faute, la translittération est difficile
Dmitry Kudriavtsev

Réponses:

32

capture d'écran de l'invite colorée

Invites PowerShell

Ce que vous voulez faire, c'est personnaliser l' invite .

L'invite par défaut dans PowerShell 3.0 et versions ultérieures est:

function prompt  
{  
    "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "  
}

Séquences d'échappement de couleur

Maintenant, Windows 10 prend en charge les codes d'échappement ANSI dans son conhost, et la couleur 24 bits est prise en charge depuis 1703.

Pour utiliser l'un des codes d'échappement ANSI, nous avons besoin d'un caractère ESC littéral . Il s'agit de l'octal 033 ou du nombre décimal 27. Dans Bash, vous utiliseriez "\033"ou "\e"; Il n'y a pas de séquence équivalente directe dans PowerShell mais vous pouvez à la place incorporer une expression:"$([char]27)"

Dans PowerShell Core, vous pouvez utiliser la "`e"séquence d'échappement à la place. Merci au commentaire de asherber.


Utilisation dans PowerShell

Cela signifie que vous pouvez, par exemple, utiliser la séquence d'échappement suivante pour définir la couleur d'arrière-plan sur cyan avec le code 46:

"$([char]27)[46m"

Qui peut être utilisé comme ceci:

echo "$([char]27)[46mColoured text"

Pour rendre les choses plus lisibles, définissons une variable:

$ESC = [char]27

Nous pouvons donc utiliser:

"$ESC[46m"

$ESCest le caractère ESC littéral, [définit le début de la liste des paramètres etm la fin.

L'utiliser dans une commande:

echo "$ESC[46mColoured text"

Et pour restaurer les paramètres de couleur d'origine, nous utilisons 0plutôt le code :

echo "$ESC[46mColoured text$ESC[0mUncoloured text"

Couleurs plus avancées

Si vous n'êtes pas satisfait de la palette de base de 16 couleurs, vous pouvez utiliser des couleurs 24 bits complètes avec le formulaire:

"$ESC[48;2;<r>;<g>;<b>m"

<r>est la valeur décimale pour le rouge de 0 à 255, <g>pour le vert et <b>pour le bleu, par exemple"$ESC[48;2;255;0;123m"

Veuillez vous référer à la documentation pour plus d'informations.

En fait, tout cela est directement équivalent à ce que vous feriez en bash, sauf que vous devez utiliser $ESC(après l'avoir défini) au lieu de \eou \033.


Définition d'une invite colorée

En les regroupant, nous pouvons utiliser les codes d'échappement de couleur ANSI dans une invite modifiée pour changer la couleur d'arrière-plan:

function prompt  
{  
    $ESC = [char]27
    "$ESC[46mPS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) $ESC[0m"  
}

Persistance

Si vous souhaitez que cela persiste entre les sessions, ajoutez-le à votre profil (comme .bashrc). Vous pouvez afficher le chemin d'accès à votre profil dans $profile.

Bob
la source
Salut ~, c'est un grand answer..But encore plus, nous pourrions rendre le texte soit le style gras Ensuite , nous pouvons le trouver plus facile ..?
yode
1
@yode C'est plus ou moins tout documenté ici , que j'ai lié dans la réponse;)
Bob
1
@yode Ah. Si vous comparez à 37 blancs non lumineux, il semble que les fenêtres PowerShell utilisent déjà 97 blanc brillant par défaut. (btw, il y aura une nouvelle palette de couleurs pour des installations propres de la prochaine version Win10. Il y a quelques captures d'écran de la palette actuelle ; notez que 1;37mc'est la même chose 97m, les deux signifiant "blanc brillant")
Bob
1
@yode Fondamentalement, conhost ne prend pas encore en charge les caractères gras. Lumineux remplace le gras et vous utilisez déjà la couleur vive par défaut. Si vous voulez vraiment du gras, vous pouvez utiliser un autre terminal, tel que ConEmu - mais il semble que leur prise en charge pour le gras ANSI ne soit pas complète non plus. OMI, ça ne vaut pas la peine.
Bob
1
Je ne peux pas faire fonctionner le Markdown correctement, mais dans PowerShell Core, vous pouvez utiliser backtick + e pour [char]27. Je ne sais pas si cela a été ajouté dans les versions antérieures.
asherber