2016-08-30 67 views
0

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

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

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

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

感谢

帕斯卡尔

回答

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__

+0

,看起来很有希望,但问题是,Assembly属性不是定义类型的程序集,但它返回mscorlib,因为对象的类型是MarshalByRefObject和d不是实际的班级。难道我做错了什么? – obivandamme