【问题标题】:Why does PowerShell display "DarkYellow" text improperly?为什么 PowerShell 不正确地显示“DarkYellow”文本?
【发布时间】:2014-03-23 09:23:18
【问题描述】:

我正在使用Write-Host cmdlet 更改提示的颜色,我注意到DarkYellow 颜色没有显示为任何黄色,而是显示为灰色!这是所有颜色的测试

PS> 0..15 | %{ Write-Host "Hello, world!" -ForegroundColor $_ }

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

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

黑色、深蓝色、深绿色、深青色、深红色、深品红色、深黄色、灰色、深灰色、蓝色、绿色、青色、红色、品红色、黄色、白色

我意识到这个“控制台颜色”列表在某种程度上对应于这个控制台窗口/快捷方式的设置,对吧?所以,DarkYellow 将是第 7 个,它看起来肯定是灰色的。

ForegroundColorSystem.ConsoleColor 和这些控制台快捷方式设置有什么联系?为什么深黄色显示为灰色“开箱即用”?我应该改变它吗?这会改变我系统上的每个控制台还是只改变这个快捷方式?

为什么控制台在 Windows 上如此复杂?!


我使用的是 64 位 Windows 7 Pro SP1,我正在从“开始”菜单启动“Windows PowerShell”快捷方式。

【问题讨论】:

  • standard 控制台中对我来说一切正常。您使用什么 Windows 以及究竟是什么控制台?我在 Windows 7 上。在微软提供的 PowerShell 控制台中,两种颜色真的很糟糕。
  • 以防万一,您可能会发现此脚本对使用控制台颜色很有用:github.com/nightroman/PowerShelf/blob/master/Show-Color.ps1
  • 所以我认为您使用 Microsoft 的 PowerShell 控制台,并使用它们预定义的颜色。我会说这是一个缺陷(错误),您可以提交它here :)
  • 我可能应该写一下新的颜色工具devblogs.microsoft.com/commandline/…

标签: windows powershell console shortcut


【解决方案1】:

Lee Holmes 的博文PowerShell's Noble Blue 谈到了这一点,但实际上并没有解释为什么更改了 DarkYellow。很可能默认的 DarkYellow 在蓝色背景下不可读。

您可能已经猜到了 - System.ConsoleColor 的名称稍有错误,因为它实际上并没有指定颜色,它指定了颜色表的索引,可以通过快捷方式进行修改。不幸的是,这是控制台子系统的限制。

如果您更改快捷方式 PowerShell.lnk,您将只为自己更改颜色,并且仅在您从该链接启动 PowerShell 时更改。如果您使用开始 |运行,或者说运行 cmd,然后从 cmd 运行 PowerShell,你会得到不同的设置。

Lee 的博文应该给你足够的提示,让你得到你喜欢的行为。

【讨论】:

  • 如果我使用左上角菜单更改设置(这叫什么?)并选择“默认值”,它表示我正在编辑“控制台 Windows 属性”,然后影响我的 PowerShell、Mingw、和命令提示符窗口(都是“ConsoleWindowClass”类型的窗口)!
  • ConsoleColor 的 MSDN 页面中,DarkYellow 被描述为“赭色”。我为 Ocher 找到了this RGB value,它与“高贵的蓝色”相映成趣!我认为蓝底红字(在很多输出中使用)是不可读的。
  • 我在 Win8.1 盒子上看到红色:128 绿色:128 蓝色:0 的颜色。但它不会称它为 DarkYellow。无论如何,这对我来说似乎并没有那么糟糕,所以也许其他颜色都不像默认文本颜色那样好看,所以他们改变了两种颜色。我只是在这里猜测。
  • 是的,我认为如果您更改默认值,您会影响所有没有自己设置的控制台窗口。
【解决方案2】:

我没有确切的答案,但我有一些有效的方法!我做了一些研究(感谢 Jason Shirk),发现System.ConsoleColor 只是颜色表的一个索引,必须用这个来表示

documentation 确实提到 DarkYellow 应该是“ochre”(RGB:204、119、34)。

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

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

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

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


“运行”对话框中的 PowerShell 提示确实有点麻烦。它采用了颜色,但没有采用我的其他一些设置(物理和缓冲区大小等)。我最终使用scoop 安装concfg

PS> scoop install concfg
PS> scoop install sudo

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

PS> concfg export > ~\.consolerc

并带着偏见将它们导入到我的行为不端提示中(您可以使用sudo,也可以从独家新闻中使用,或者只是启动一个管理员提示)

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。
  • 我自己也遇到了这个问题。 PS 对我来说也有同样的问题(即使是在全新安装 Creator 的 1703 时。我试过 [console]::ResetColor() 但仍然有问题。
猜你喜欢
  • 2011-08-14
  • 2017-08-05
  • 1970-01-01
  • 2022-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多