以编程方式更改 PowerShell 的 16 种默认控制台颜色



PowerShell改进了(坦率地说)模糊的Windows控制台配色方案,为其16种控制台颜色之一分配了一个蓝色值(由于某种原因被称为DarkMagenta - ),并将其用作默认屏幕背景。

我想以编程方式将 16 种颜色中的每一种更改为自定义配色方案。例如,在我的PowerShell配置文件中。

我已经找到了有关如何更改控制台主机的 16 种颜色中的

哪一种分配给不同类型的文本的说明,但我想要的是实际将控制台主机的 16 种颜色中的每一种更改为不同的十六进制值。(仅供我自己使用,不适用于其他用户或其他控制台,例如cmd.exe

当然,这可以通过右键单击菜单栏并手动调整"属性"或"默认"设置来完成,但这很快就会很累。而且我找不到这些设置的保留位置。

(我已经搜索了注册表并C:Users<current_user>AppData,除了HKCU:Console下的ColorTable##属性外,什么也没找到,其范围显然比PowerShell控制台设置更广泛。

如果有人能帮忙,将不胜感激。

控制台颜色在多个位置定义:

  • 全局/默认值HKCU:Console 。这适用于所有conhost.exe应用程序,包括cmd.exepowershell.exe
  • 每个进程:HKCU:Console<PROCESS_PATH_WITH_UNDESCORE>用于特定于进程的更改。例如。 HKEY_CURRENT_USERConsole%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe已定义并修改了ColorTable05ColorTable06
  • 每个快捷指令:在快捷指令内 (.lnk)。这很难以编程方式修改,可能需要 P\Invoke。

您可以使用以下命令使用 PS 修改进程级值:

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

请注意,要查看进程级别的值,您需要使用运行,Windows资源管理器等启动PS。如果您使用其中一个快捷方式,则将使用该快捷方式的值。因此,修改快捷方式并保留其副本以供新设置可能更容易。

每个"ColorTable"都有一个在System.ConsoleColor-enum中硬编码的名称,所以他们使用名为DarkMagneta的名称只是"随机的"。可能是因为它是一种独特的颜色,很少使用。

我搜索了"更改Powershell控制台颜色"并找到了大量示例。

也许这就是您正在寻找的:

如何设置 PowerShell 控制台背景颜色

$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

关于该主题还有另一个讨论:

在配置文件脚本中使用十六进制值设置 Powershell 颜色

我已经为Windows控制台颜色制作了一个名为Concfg的实用程序。

它可以从 JSON 预设文件导入颜色,并负责从注册表和.lnk文件中删除覆盖。

最新更新