在 PowerShell 中使用 IDispatch 调用方法

Call method using IDispatch in PowerShell

我正在尝试使用 PowerShell 与 COM 应用程序通信。当我实例化它时,我只能通过 IDispatch 接口与它对话。这本身就很有趣,因为我可以在 Visual Studio 中提前绑定到它并与它交谈 'directly'。

当我这样做时:

$obj= New-Object -ComObject ComAssembly.Identifier # that's a made up name
$obj | gm

我只取回标准的 .Net 内容。但我可以使用以下语法调用属性:

$path = [System.__ComObject].InvokeMember('Path',[System.Reflection.BindingFlags]::GetProperty,$null,$obj,$null)

那会给我 Path 属性.

我想做的是调用一个方法,它有两个参数(在我的例子中是一个字符串和 $path 参数)。我发现调用方法的一般方式是这样的::

$anotherthing = [System.__ComObject].InvokeMember('SomeMethod',[System.Reflection.BindingFlags]::InvokeMethod,$null,$cmc,<args>)

我的问题:提供 <args> 的语法是什么?我试图简单地将它们作为参数传递,但这是行不通的。

在这种特殊情况下,SomeMethod 只需要两个字符串参数,将它们包装在一个数组中,就像@CherryDT(谢谢)建议的那样:

$obj= New-Object -ComObject ComAssembly.Identifier # that's a made up name
$path = [System.__ComObject].InvokeMember('Path',[System.Reflection.BindingFlags]::GetProperty,$null,$obj,$null)
$anotherthing = [System.__ComObject].InvokeMember('SomeMethod',[System.Reflection.BindingFlags]::InvokeMethod,$null,$obj,@('SomeString', $path))