Wie färbe ich die PowerShell-Eingabeaufforderung ein?

3166
yode

Ich gebe immer meine Aufforderung, diese Farbe in meinem Linux zu haben. Dann finde ich meine Eingabe im schwarzen Befehlsfenster. Aber können wir in meiner Powershell dieselbe Farbe machen ?

15
Was ist die Konsolenschriftart? Dmitry Kudriavtsev vor 6 Jahren 0
@DmitryKudriavtsev Schauen Sie [this] (https://i.stack.imgur.com/qmT90.png), vielleicht handelt es sich um * Sim-Lied * in Englisch. yode vor 6 Jahren 0
Das ist SimSun vielleicht? Dmitry Kudriavtsev vor 6 Jahren 0
@DmitryKudriavtsev Ja, sorry, ich mache einen Fehler. yode vor 6 Jahren 0
Nicht deine Schuld, Transliteration ist schwer Dmitry Kudriavtsev vor 6 Jahren 0

1 Antwort auf die Frage

26
Bob

screenshot of coloured prompt

PowerShell-Eingabeaufforderungen

Sie möchten die Aufforderung anpassen .

Die Standardaufforderung in PowerShell 3.0 und neuer lautet:

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

Farbwechselsequenzen

Jetzt, 10 Windows - unterstützt den ANSI - Escape - Codes in seiner conhost und 24-Bit - Farbe ist seit 1703 unterstützt.

Um einen der ANSI-Escape-Codes zu verwenden, benötigen wir ein buchstäbliches ESC-Zeichen . Dies ist Oktal 033 oder Dezimal 27. In Bash würden Sie "\033"oder verwenden "\e"; Es gibt keine direkte gleichwertige Sequenz in PowerShell, Sie können stattdessen einen Ausdruck einbetten:"$([char]27)"


In PowerShell verwenden

Dies bedeutet, dass Sie beispielsweise die folgende Escape-Sequenz verwenden können, um die Hintergrundfarbe mit dem Code auf Cyan zu setzen 46:

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

Was kann so verwendet werden:

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

Um die Dinge lesbarer zu machen, definieren wir eine Variable:

$ESC = [char]27 

So können wir verwenden:

"$ESC[46m" 

Wo $ESCist das wörtliche ESC-Zeichen, [definiert den Anfang der Param-Liste und mdas Ende.

Verwenden Sie es in einem Befehl:

echo "$ESC[46mColoured text" 

Um die ursprünglichen Farbeinstellungen wiederherzustellen, verwenden wir 0stattdessen den Code :

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

Fortgeschrittenere Farben

Wenn Sie mit der 16-Farben-Palette nicht zufrieden sind, können Sie mit dem Formular volle 24-Bit-Farben verwenden:

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

Wo <r>ist der Dezimalwert für Rot von 0-255, <g>für Grün und <b>für Blau, z"$ESC[48;2;255;0;123m"

Weitere Informationen finden Sie in der Dokumentation .

Tatsächlich entspricht dies alles direkt dem, was Sie in bash tun würden, außer Sie müssen $ESC(nachdem Sie es definiert haben) anstelle von \eoder verwenden \033.


Festlegen einer farbigen Eingabeaufforderung

Zusammenfassend können wir die ANSI-Farb-Escape-Codes in einer modifizierten Aufforderung verwenden, um die Hintergrundfarbe zu ändern:

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

Beharrlichkeit

Wenn Sie möchten, dass dieser Vorgang über mehrere Sitzungen hinweg erhalten bleibt, fügen Sie ihn Ihrem Profil hinzu (z. B. .bashrc). Sie können den Pfad zu Ihrem Profil in sehen $profile.

Hi ~, es ist eine großartige Antwort .. Aber weiter, könnten wir den Text [fett] (https://i.stack.imgur.com/KJWEB.png) machen? Dann können wir es einfacher finden. . yode vor 6 Jahren 0
@yode Sie können den Code "1" hinzufügen, um die Option "Fett / Hell" zu aktivieren, z. B. "$ ESC [46; 1m". Es sieht jedoch so aus, als ob conhost derzeit keine echte Fettschrift unterstützt - es wird lediglich eine helle Vordergrundfarbe verwendet. Sie können '4' für eine Unterstreichung hinzufügen, wenn Sie möchten. Bob vor 6 Jahren 0
Verrückter Mann. Können Sie mir sagen, wie Sie diese Informationen finden? yode vor 6 Jahren 0
@yode Es ist mehr oder weniger alles [hier] (https://docs.microsoft.com/de-de/windows/console/console-virtual-terminal-sequences#span-idtextformattingspanspan-idtextformattingspanspan-idtextformattingspantext-formatting) dokumentiert Ich habe in der Antwort verlinkt;) Bob vor 6 Jahren 1
Als dein kleiner Kerl scheint es, dass die 91 das ist, was ich hinter mir habe. Aber es scheint, es funktioniert nicht .. yode vor 6 Jahren 0
Anstatt "$ ESC" zu definieren, definieren Sie Dinge wie "$ RED", "$ BLUE" und "$ OFF". Ich denke, das würde die Lesbarkeit wirklich verbessern. `" Diese $ -Phrase ist blau $ und $ diese ist rot $ . " Dennis Williamson vor 6 Jahren 0
@DennisWilliamson Es gibt genug verschiedene Fälle, die meiner Meinung nach unhandlich werden - wie unterscheidet man zwischen blauem Hintergrund und Vordergrund? Sie können mehrere Formatierungseinstellungen in einem einzigen Befehl ändern, z. B. color + underline. Es ist sinnvoller, wenn Sie es für viele Befehle benötigen, z. B. `$ COLOUR_ERROR`. Aber das ist nicht wirklich nützlich für eine Aufforderung. `$ ESC` wurde gemacht, so dass es mehr oder weniger ein Drop-In-Ersatz für denselben Befehl in der Bash sein kann (` \ e`). Bob vor 6 Jahren 0
@yode Wie funktioniert es nicht? Welchen Befehl haben Sie genau verwendet? Das wird dir nicht fett, aber es sollte dir eine leuchtend rote Vordergrundfarbe geben. Bob vor 6 Jahren 0
Es scheint, ein [dasselbe Ergebnis] zu erhalten (https://i.stack.imgur.com/y2jmZ.png) yode vor 6 Jahren 0
@yode Ah. Wenn Sie mit 37 nicht hellem Weiß vergleichen, werden PowerShell-Fenster standardmäßig bereits mit 97 hellweiß verwendet. (Übrigens, es wird eine [neue Farbpalette] (https://blogs.msdn.microsoft.com/commandline/2017/08/02/updating-the-windows-console-colors/) für saubere Installationen der Software geben Nächste Win10-Version: Es gibt einige Screenshots der [aktuellen Palette] (https://msdnshared.blob.core.windows.net/media/2017/08/ConsoleChangesSideBySideNoBar1.png); beachten Sie, dass '1; 37m' gleich ist als "97m", beide bedeuten "helles Weiß") Bob vor 6 Jahren 1
@yode Im Grunde unterstützt conhost noch keine Fettdrucke. Bright ist ein Ersatz für Fettdruck, und Sie verwenden standardmäßig bereits die helle Farbe. Wenn Sie wirklich Fett wünschen, können Sie ein alternatives Terminal wie [ConEmu] (https://conemu.github.io/de/FaqBoldItalic.html) verwenden. Die Unterstützung für ANSI-Fett scheint jedoch nicht vollständig zu sein . IMO, die Mühe lohnt sich nicht. Bob vor 6 Jahren 1