gpt4 book ai didi

PowerShell 不能使用匹配的枚举类型?

转载 作者:行者123 更新时间:2023-12-04 10:50:22 25 4
gpt4 key购买 nike

我在这里做一些愚蠢的事情吗?

我指定一个函数接受一个特定的枚举类型作为参数:

PS> add-type -AssemblyName System.ServiceProcess
PS> function test([System.ServiceProcess.ServiceControllerStatus]$x) { Write-host $x $x.gettype() }

该类型绝对在范围内,因为我可以访问它的实例(并且我手动导入了程序集):
PS> [System.ServiceProcess.ServiceControllerStatus]::Stopped
Stopped

然后,当我尝试将上述枚举的实例传递给该函数时,它会出错:
PS> test [System.ServiceProcess.ServiceControllerStatus]::Stopped
test : Cannot process argument transformation on parameter 'x'. Cannot convert value
"[System.ServiceProcess.ServiceControllerStatus]::Stopped" to type "System.ServiceProcess.ServiceControllerStatus".
Error: "Unable to match the identifier name [System.ServiceProcess.ServiceControllerStatus]::Stopped to a valid
enumerator name. Specify one of the following enumerator names and try again: Stopped, StartPending, StopPending,
Running, ContinuePending, PausePending, Paused"
At line:1 char:6
+ test [System.ServiceProcess.ServiceControllerStatus]::Stopped
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [test], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,test

但是,强制使用字符串很高兴:
PS> test 'Stopped'
Stopped System.ServiceProcess.ServiceControllerStatus

这是怎么回事?

最佳答案

您在解析模式方面遇到了一个小问题。您可以在参数周围放置括号,它会起作用:

test ([System.ServiceProcess.ServiceControllerStatus]::Stopped)
或者,从字符串到枚举的转换自然发生,因此您可以编写:
test Stopped
这里有几个很好的链接,讨论解析模式:
  • About Parsing
  • Effective PowerShell Item 10: Understanding PowerShell Parsing Modes
  • 关于PowerShell 不能使用匹配的枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25732814/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com