如果有帮助,我使用的是PowerShell Core v.6.0.1或v.6.1.0。显然,在某些版本的PowerShell上,解析-1会导致错误,但在我的两个系统上均不会。实际上,给定任何负数,我都可以获得“有效”的ConsoleColor。我只是想了解它为什么起作用,以及它的含义。
我正在使用PowerShell脚本,该脚本可让您使用箭头键here从选项菜单中进行选择,此question中对此进行了讨论。
我注意到脚本的代码尝试使用[Console]::BackgroundColor
和[Console]::ForegroundColor
的当前值,但是在我的PowerShell会话中,这些值返回为-1,这不是一个可以用来设置它们。
我更改了脚本,以用我选择的某些颜色替换值(如果尚未自定义),但是我想也能够重置它们。 [Console] :: ResetColor()重置背景和前景色,因此如果其中一个是自定义的,而另一个不是自定义的,则无法使用它。
但是,这确实可行:
[Console]::ForegroundColor = [Enum]::Parse([ConsoleColor], -1)
我实际上发现我可以备份原始颜色并将其分配回去,所以现在我只是想知道这个枚举的总体表现。
为什么上述方法有效,但[Console]::ForegroundColor = -1
无效?
答案 0 :(得分:1)
我很好奇你的追求。
要记录枚举,请使用:
[Enum]::GetValues([ConsoleColor]) | Select-Object @{n="Name";e={"$_"}},value__
示例输出:
Name value__
---- -------
Black 0
DarkBlue 1
DarkGreen 2
DarkCyan 3
DarkRed 4
DarkMagenta 5
DarkYellow 6
Gray 7
DarkGray 8
Blue 9
Green 10
Cyan 11
Red 12
Magenta 13
Yellow 14
White 15
您的上述代码在PSv6.1中导致错误
[Console]::ForegroundColor = [Enum]::Parse([ConsoleColor], -1)
异常设置“ ForegroundColor”:“ ConsoleColor枚举值未在该枚举上定义。请使用枚举中定义的颜色。” 在第1行:char:1 + [Console] :: ForegroundColor = [Enum] :: Parse([ConsoleColor],-1) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ + CategoryInfo:未指定:(:) [],SetValueInvocationException + FullyQualifiedErrorId:ExceptionWhenSetting
要备份颜色
$OldForegroundColor = $Host.UI.RawUI.ForeGroundColor