Czy robię coś głupiego tutaj?PowerShell nie może używać dopasowanego typu wyliczenia?
określić, że funkcja przyjmuje określony typ enum jako argument:
PS> add-type -AssemblyName System.ServiceProcess
PS> function test([System.ServiceProcess.ServiceControllerStatus]$x) { Write-host $x $x.gettype() }
Typ jest zdecydowanie w zakresie od może uzyskać dostęp do wystąpienia jego (i ręcznie importowane zespół)
PS> [System.ServiceProcess.ServiceControllerStatus]::Stopped
Stopped
Wtedy, gdy próbuję przekazać funkcję instancji enum powiedział, IT błędy oUT:
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
to całkiem zadowolony zmuszanie ciąg, choć:
PS> test 'Stopped'
Stopped System.ServiceProcess.ServiceControllerStatus
Co się dzieje?
(komunikaty o błędach PowerShell są tak niechlujny wygląd. = /)
Jestem pewien, że to naprawdę stara rada z czasów PS1 czy coś takiego ... Jak widać w innych odpowiedziach, składnia w pytaniu działa zgodnie z oczekiwaniami. To połączenie ma pewne problemy z analizą. – jpmc26