在 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))
我正在尝试使用 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))