将枚举值传递给Powershell中ComObject的方法

时间:2016-08-30 14:48:28

标签: powershell enums com

我想将Enum参数传递给Powershell中的ComObject方法。问题是,我不知道如何创建此参数。方法的签名是My.ComObject.Method(EnumType,string,string)。

$o = New-Object -ComObject "My.ComObject"
$o.method([My.EnumType]::EnumValue, "s", "s")

上面的代码总是抛出一个TypeNotFoundException。我还尝试将枚举指定为字符串,但这引发了另一个异常,即它无法将字符串转换为对象。

创建枚举类型的枚举值我需要做什么,该枚举类型与我创建的ComObject位于同一个COM程序集中。

由于

帕斯卡

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

$o = New-Object -ComObject "My.ComObject"

# Extract all enum values from My.ComObject and store them in $enums
$enums = New-Object -TypeName PSObject
$o.GetType().Assembly.GetExportedTypes() | ?{ $_.IsEnum } | %{
    $e = $_
    $e.GetEnumNames() | %{
        $enums | Add-Member -MemberType NoteProperty -Name $_ -Value $e::($_)
    }
}

$o.method($enums.EnumValue, "s", "s")

要查看分配给EnumValue的数值,请使用$enums.EnumValue.value__