无法在PowerShell函数中运行[System .__ ComObject] .InvokeMember

时间:2014-03-26 10:53:51

标签: powershell com ole

我一直在尝试编写一个程序来访问第三方OLE DLL的属性和方法。

下面的代码运行正常。

[System.__ComObject].InvokeMember("AppName", [System.Reflection.BindingFlags]::GetProperty, $null, $appObj, $null)

由于调用是重复的,我想调用下面的包装器。

function Get-Property {
  param(
    $objOLE,
    [String] $propertyName
  )
  [System.__ComObject].InvokeMember($propertyName,[System.Reflection.BindingFlags]::GetProperty,$null,$objOLE,$null)
}

脚本运行时

Get-Property($appObj, "AppName")

我收到了这个错误:

Exception calling "InvokeMember" with "5" argument(s): "Method 'System.__ComObject.ToString' not found."
At F:\Scripts\test.ps1:21 char:36
+   [System.__ComObject].InvokeMember <<<< ($propertyName,[System.Reflection.BindingFlags]::GetProperty,$null,$objOLE,$null)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

这令人困惑。有人有洞察力吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

请记住,您的函数是PowerShell函数/命令,而不是.NET方法,即不要使用parens而不要使用逗号分隔args:

Get-Property $appObj AppName

你拥有它的方式,你的函数得到一个参数,它是一个包含两个元素的数组。