Wie färbe ich die Powershell-Eingabeaufforderung ein?

17

Ich mache immer die Aufforderung, diese Farbe in meinem Linux zu haben. Dann kann ich meine Eingabe im schwarzen Befehlsfenster finden. Aber können wir die gleiche Farbe in meiner Powershell machen ?

yode
quelle
Was ist die Konsolenschriftart?
Dmitry Kudriavtsev
@DmitryKudriavtsev Schauen Sie dies , vielleicht ist es Sim Song auf Englisch.
Yode
Das ist vielleicht SimSun?
Dmitry Kudriavtsev
@DmitryKudriavtsev Ja, tut mir leid, ich habe einen Fehler gemacht.
Yode
nicht deine Schuld, Transliteration ist schwer
Dmitry Kudriavtsev

Antworten:

32

Screenshot der farbigen Eingabeaufforderung

PowerShell-Eingabeaufforderungen

Sie möchten die Eingabeaufforderung anpassen .

Die Standardeingabeaufforderung in PowerShell 3.0 und höher lautet:

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

Farbfluchtsequenzen

Nun, Microsoft Windows 10 unterstützt der 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 äquivalente Sequenz in PowerShell, aber Sie können stattdessen einen Ausdruck einbetten:"$([char]27)"

In PowerShell Core können Sie "`e"stattdessen die Escape-Sequenz verwenden. Danke an den Kommentar von asherber.


In PowerShell verwenden

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

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

Welches kann so verwendet werden:

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

Um die Lesbarkeit zu verbessern, 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 Parameterliste und mdas Ende.

Verwenden Sie es in einem Befehl:

echo "$ESC[46mColoured text"

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

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

Fortgeschrittenere Farben

Wenn Sie mit der grundlegenden 16-Farben-Palette nicht zufrieden sind, können Sie mit dem folgenden Formular vollständige 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 ist dies alles direkt äquivalent zu dem, was Sie in bash tun würden, außer dass Sie $ESC(nachdem Sie es definiert haben) anstelle von \eoder verwenden müssen \033.


Festlegen einer farbigen Eingabeaufforderung

Zusammengenommen können wir die ANSI-Escape-Farbcodes in einer modifizierten Eingabeaufforderung 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 dies über mehrere Sitzungen hinweg so bleibt, fügen Sie es Ihrem Profil hinzu (wie .bashrc). Sie können den Pfad zu Ihrem Profil in anzeigen $profile.

Bob
quelle
Hallo ~, es ist eine großartige Antwort. Aber noch mehr, könnten wir den Text fett gestalten ? Dann können wir es einfacher finden.
Yode
1
@yode Es ist mehr oder weniger alles dokumentiert hier , was ich in der Antwort verknüpft;)
Bob
1
@yode Ah. Im Vergleich zu 37 nicht hellen Weißtönen wird in PowerShell-Fenstern standardmäßig bereits 97 helle Weißtöne verwendet. (Übrigens wird es eine neue Farbpalette für Neuinstallationen der nächsten Win10-Version geben. Es gibt dort einige Screenshots der aktuellen Palette ; beachten Sie, dass beide 1;37mdie gleiche 97mBedeutung haben wie "helles Weiß")
Bob,
1
@yode Grundsätzlich unterstützt conhost Fettdruck noch nicht. Hell ist ein Ersatz für Fett, und Sie verwenden bereits standardmäßig die helle Farbe. Wenn Sie wirklich Fettdruck wünschen, können Sie ein alternatives Terminal wie ConEmu verwenden. Die Unterstützung für ANSI-Fettdruck scheint jedoch ebenfalls nicht vollständig zu sein. IMO, es ist die Mühe nicht wert.
Bob
1
Ich kann den Markdown nicht ordnungsgemäß ausführen, aber in PowerShell Core können Sie backtick + e für verwenden [char]27. Ich bin nicht sicher, ob dies in früheren Versionen hinzugefügt wurde.
Asherber