2016-03-20 11 views
3

PowerShell verbessert das (ehrlich gesagt) unscharfe Windows Console-Farbschema, indem es einer seiner 16 Konsolenfarben einen bläulichen Wert zuweist (der aus irgendeinem Grund auch als DarkMagenta bekannt ist) als Standardbildschirmhintergrund.Programmgesteuertes Ändern der 16 Standardkonsolenfarben von PowerShell

Ich möchte programmgesteuert jede der 16 Farben zu einem benutzerdefinierten Farbschema ändern. Zum Beispiel in meinem PowerShell-Profil.

Ich habe Erklärungen gefunden, wie man ändert, welche der 16 Farben der ConsoleHost verschiedenen Arten von Text zugewiesen wird, aber was ich will, ist eigentlich jede der 16 Farben der ConsoleHost auf einen anderen Hex-Wert zu ändern. (Nur für mich, nicht für andere Benutzer oder andere Konsolen, wie cmd.exe.)

Natürlich kann dies durch Rechtsklick auf die Menüleiste und manuelle Anpassung der "Eigenschaften" oder "Standard" -Einstellungen, aber Das wird sehr schnell ermüdend. Und ich kann nicht herausfinden, wo diese Einstellungen beibehalten werden.

(Ich habe gesucht bereits die Registrierung und C:\Users\<current_user>\AppData, und nichts gefunden, mit Ausnahme der ColorTable## Eigenschaften unter HKCU:\Console, dessen Umfang ist offensichtlich breiter als die Powershell-Konsole Einstellungen.)

Wenn jemand helfen kann, wäre es sehr geschätzt.

Antwort

6

Die Konsole Farben definiert sind, in mehrere Plätze:

  • Global/Standard: HKCU:\Console. Dies gilt für alle conhost.exe -Anwendungen einschließlich cmd.exe und powershell.exe.
  • Pro Prozess:HKCU:\Console\<PROCESS_PATH_WITH_UNDESCORE> für prozessspezifische Änderungen. Ex. HKEY_CURRENT_USER\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe ist definiert und hat ColorTable05 und ColorTable06 geändert.
  • Pro Verknüpfung: Innerhalb der Verknüpfung (.lnk). Dies ist schwer programmatisch zu ändern, würde wahrscheinlich P \ Invoke erfordern.

Sie können die Prozessebene Werte mit PS ändern mit:

Set-ItemProperty -Path "HKCU:\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe" -Name ColorTable04 -Value 5645313 

dass bewusst sein, die Werte der Prozessebene zu sehen, Sie starten müssen PS unter Verwendung einer Lauf, Windows Explorer etc. Wenn Sie Verwenden Sie eine der Verknüpfungen, dann werden die Werte der Verknüpfung verwendet. So könnte es einfacher sein, die Verknüpfung zu ändern und eine Kopie davon für neue Setups zu behalten.

Jede "ColorTable" hat einen Namen, der in System.ConsoleColor-enum fest codiert ist, also ist es nur "zufällig", dass sie die sogenannte DarkMagneta verwendet haben. Wahrscheinlich, weil es eine einzigartige Farbe ist, die nicht so oft verwendet wird.

+1

Richtig, der Prozess pro Prozess wird in dem Link am Ende meiner Antwort diskutiert. Das OP erwähnt, dass er bereits alle diese Verbindungen durchgemacht hat, aber nach 2,5 Tagen hat es das Problem immer noch nicht gelöst. Unklar warum, da diese Ansätze für alle anderen funktionieren ... –

+0

Was ich brauchte, war eine autoritative Quelle, die das Obige erklärte. Alles, was ich finden konnte, waren "Tipps und Tricks", die die zugrunde liegende Systemlogik nicht erklärten. Gibt es eine Buch-, Standard- oder Dokumentationsquelle, die ich lesen könnte, die das oben erklärt? Auf jeden Fall, danke Frode und Kory! –

3

Ich suchte nach "Change Powershell Konsole Farbe" und fand Tonnen von Beispielen.

Vielleicht ist es das, was Sie suchen:

How can I set the PowerShell console background color

$Host.UI.RawUI.BackgroundColor = ($bckgrnd = 'DarkBlue') 
$Host.UI.RawUI.ForegroundColor = 'White' 
$Host.PrivateData.ErrorForegroundColor = 'Red' 
$Host.PrivateData.ErrorBackgroundColor = $bckgrnd 
$Host.PrivateData.WarningForegroundColor = 'Magenta' 
$Host.PrivateData.WarningBackgroundColor = $bckgrnd 
$Host.PrivateData.DebugForegroundColor = 'Yellow' 
$Host.PrivateData.DebugBackgroundColor = $bckgrnd 
$Host.PrivateData.VerboseForegroundColor = 'Green' 
$Host.PrivateData.VerboseBackgroundColor = $bckgrnd 
$Host.PrivateData.ProgressForegroundColor = 'Cyan' 
$Host.PrivateData.ProgressBackgroundColor = $bckgrnd 
Clear-Host 

Es gibt auch eine andere Diskussion zum Thema unter:

Setting Powershell colors with hex values in profile script

+0

Ich würde tatsächlich alle diese Materialien in meinen 2,5 Tagen der Suche nach dem Thema stoßen. Vergessen Sie den Wert von $ Host.UI.RawUI.BackgroundColor. Es ist der Wert von 'DarkBlue', den ich ändern möchte. Klicken Sie dazu mit der rechten Maustaste auf die Menüleiste, aber wo werden diese Anpassungen gespeichert? Nicht in dem Registrierungsschlüssel, auf den Lee Holmes verweist, weil er nicht auf meinem System vorhanden ist. –

+0

Haben Sie versucht, den Schlüssel zu erstellen, wenn er nicht existierte, um das für den letzten Link in meiner Antwort für die vorhandene Antwort auf SO für diese ähnliche Frage zu funktionieren? –

2

Ich habe ein Dienstprogramm für Windows-Konsolenfarben Concfg genannt.

Es kann Farben aus JSON-Voreinstellungsdateien importieren und kümmert sich darum, die Überschreibungen aus der Registrierungs- und der .lnk-Datei zu entfernen.

Verwandte Themen