我一直在尝试编写一个程序来访问第三方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
这令人困惑。有人有洞察力吗?提前谢谢。
答案 0 :(得分:2)
请记住,您的函数是PowerShell函数/命令,而不是.NET方法,即不要使用parens而不要使用逗号分隔args:
Get-Property $appObj AppName
你拥有它的方式,你的函数得到一个参数,它是一个包含两个元素的数组。