2016-08-30 63 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