在PowerShell / DotNet Core中进行枚举(解析)行为:它如何工作?

时间:2018-10-25 21:23:26

标签: .net-core powershell-core

如果有帮助,我使用的是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无效?

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