为什么PowerShell无法正确显示“DarkYellow”文本?

18

我正在使用Write-Host命令来更改提示符的颜色,我注意到DarkYellow颜色没有显示出任何黄色,而是变成了灰色!这是所有颜色的测试:

PS> 0..15 | %{ Write-Host "Hello, world!" -ForegroundColor $_ }
我通过使用错误值获取了所有枚举值的列表。

我通过使用错误值获取了所有枚举值的列表

PS> Write-Host "Hello, World!" -ForegroundColor foo

黑色,深蓝色,深绿色,深青色,深红色,深洋红色,暗黄色,灰色,深灰色,蓝色,绿色,青色,红色,洋红色,黄色,白色

我意识到这个“控制台颜色”列表与控制台窗口/快捷方式的设置有些对应,对吧?所以,暗黄色应该是第7个,而它看起来确实像是灰色。

enter image description here

ForegroundColorSystem.ConsoleColor和这些控制台快捷方式的设置之间有什么联系?为什么暗黄色默认显示为灰色?我应该改变它吗?这会改变我的系统上所有控制台还是只是这个快捷方式?

为什么Windows的控制台如此难搞?!


我使用的是64位Windows 7专业版SP1,并从开始菜单启动“Windows PowerShell”快捷方式。


标准控制台中,一切都正常。您使用的是哪个Windows版本和哪个控制台?我使用的是Windows 7。在微软提供的PowerShell控制台中,有两种颜色非常糟糕。 - Roman Kuzmin
万一需要,您可能会发现这个脚本对于控制台颜色的调试非常有用:https://github.com/nightroman/PowerShelf/blob/master/Show-Color.ps1 - Roman Kuzmin
我认为你使用的是由微软预定义颜色的PowerShell控制台。我会说这是一个缺陷(bug),你可以在这里提交它:https://connect.microsoft.com/PowerShell/Feedback :) - Roman Kuzmin
我应该写一篇关于新的colortool的文章。https://devblogs.microsoft.com/commandline/introducing-the-windows-console-colortool/ - Anthony Mastrean
2个回答

12

李·霍姆斯(Lee Holmes)的博客文章,PowerShell的高贵蓝色,谈到了这个问题,但并没有解释为什么 DarkYellow 被更改。很可能是默认的 DarkYellow 在蓝色背景下不可读。

你可能已经发现了——System.ConsoleColor 的命名略有误导,它实际上并没有指定颜色,而是指定一个颜色表中的索引,该索引可以通过快捷方式进行修改。这是控制台子系统的一个限制。

如果您更改 PowerShell.lnk 快捷方式,那么只会在使用该快捷方式启动 PowerShell 时才会更改颜色设置,并且仅适用于您自己。如果您使用“开始”|“运行”,或者运行 cmd,然后从 cmd 运行 PowerShell,则会得到不同的设置。

Lee 的博客文章应该可以为您提供足够的提示,以获取您所需的行为。


如果我使用左上角菜单(它叫什么来着?)更改设置并选择"默认值", 它会显示我正在编辑 "控制台窗口属性",然后影响我的 PowerShell、Mingw 和命令提示符窗口 (它们都是 "ConsoleWindowClass" 类型的窗口)! - Anthony Mastrean
在MSDN页面上,ConsoleColor中,DarkYellow被描述为“赭色”。我找到了这个赭色的RGB值,它看起来很适合与“高贵蓝”搭配!我认为红色在蓝色上(在许多输出中使用)是不可读的。 - Anthony Mastrean
我在我的Win8.1电脑上看到了红色:128 绿色:128 蓝色:0 配色。虽然我不会称其为暗黄色,但总的来说,它对我来说并不那么糟糕,也许默认文本颜色中没有其它颜色看起来很好,所以他们改变了两种颜色。这只是我的猜测。 - Jason Shirk
是的,我认为如果您更改默认设置,则会影响所有没有自己设置的控制台窗口。 - Jason Shirk

7
我没有确切的答案,但我有一些基本行之有效的东西!我进行了一些研究(感谢Jason Shirk),发现System.ConsoleColor只是颜色表中的索引,必须用此表示。

enter image description here

文档提到,DarkYellow应该是“赭石色"(RGB:204,119,34)。

| DarkYellow  | The color dark yellow (ochre). |

从应用程序的左上角窗口菜单中选择“Defaults”,您将看到通用的“控制台窗口属性”(如上所示),它将修改任何ConsoleWindowClass类型的窗口。

选择“屏幕文本”选项,您会注意到它设置为使用DarkYellow的值。我不知道他们为什么没有在旁边使用GrayDarkGray!点击第7个框(DarkYellow的索引)并将其更改为黄褐色的RGB值。然后,将“屏幕文本”设置为GrayDarkGray(除非您真的想要默认使用黄褐色前景文本)。

您所有的命令提示符、PowerShell和Git Bash(mingw)控制台都将被更改(我的控制台也是如此)。


我在“运行”对话框中使用PowerShell提示符时遇到了一些问题。它接受了颜色,但没有接受我的其他设置(物理大小、缓冲区大小等)。最终我使用scoop安装了concfg
PS> scoop install concfg
PS> scoop install sudo

并导出了我的好的控制台设置

PS> concfg export > ~\.consolerc

我将它们带有偏见地导入到我不听话的提示符中(您可以使用sudo,也可以从 scoop 启动管理员提示符)。

PS> sudo concfg import ~\.consolerc

实际上,concfg 似乎导出了所有内容,包括颜色表值和选择!以下是我的配置(颜色部分)的部分转储

{
    "popup_colors":  "cyan,white",
    "dark_gray":  "#808080",
    "screen_colors":  "gray,dark_magenta",
    "dark_green":  "#008000",
    "blue":  "#0000ff",
    "dark_yellow":  "#cc7722",
    "red":  "#ff0000",
    "magenta":  "#ff00ff",
    "dark_red":  "#800000",
    "yellow":  "#ffff00",
    "dark_magenta":  "#012456",
    "cyan":  "#00ffff",
    "green":  "#00ff00",
    "dark_blue":  "#000080",
    "gray":  "#c0c0c0",
    "white":  "#ffffff",
    "black":  "#000000",
    "dark_cyan":  "#008080"
}

RGB:204,119,34在PowerShell ISE中与'DarkYellow'不匹配。屏幕截图和Paint中的取色器工具建议使用RGB:136,136,0。 - Jason Boyd
我自己也遇到了这个问题。即使在 Creator 的 1703 上进行了新的安装,PS 对我来说仍然存在同样的问题。我尝试过 [console]::ResetColor(),但问题仍然存在。 - SOSidb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接