【问题标题】:Pass an enum value to a method of a ComObject in Powershell将枚举值传递给 Powershell 中 ComObject 的方法
【发布时间】:2017-01-06 22:17:50
【问题描述】:

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

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

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

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

谢谢

帕斯卡

【问题讨论】:

    标签: powershell enums 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__

    【讨论】:

    • 看起来很有希望,但问题是,Assembly 属性不是定义类型的程序集,而是返回 mscorlib,因为 Object 的 Type 是 MarshalByRefObject 而不是实际的类.我做错了吗?
    猜你喜欢
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多