Mache ich hier etwas Dummes?PowerShell kann den passenden Aufzählungstyp nicht verwenden?
ich angeben, dass eine Funktion eine bestimmte Aufzählungstyp als Argument:
PS> add-type -AssemblyName System.ServiceProcess
PS> function test([System.ServiceProcess.ServiceControllerStatus]$x) { Write-host $x $x.gettype() }
Die Art ist definitiv in Umfang, da ich Instanzen zugreifen kann (und ich importierte die Baugruppe manuell):
PS> [System.ServiceProcess.ServiceControllerStatus]::Stopped
Stopped
Dann, wenn ich versuche, die Funktion eine Instanz des enum zu passieren, es Fehler aus:
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
Es ist ganz glücklich einen String Nötigung, aber:
PS> test 'Stopped'
Stopped System.ServiceProcess.ServiceControllerStatus
Was ist los?
(Powershell-Fehlermeldungen sind so chaotisch suchen. = /)
Ziemlich sicher, das ist wirklich alte Ratschläge zurück von den PS1 Tagen oder etwas ... Wie in den anderen Antworten gesehen, funktioniert die Syntax in der Frage wie erwartet. Es ist der Aufruf, der einige Parsing-Probleme hat. – jpmc26