2012-03-24 58 views
1

我有兴趣从Windows Powershell与OLE自动化(IDispatch)服务器进行通信。任何人都可以向我指出一些简单的示例代码,说明这样做吗?我知道我可以使用New-Object -com My.App.Interface来创建对象,但随后与它交谈是另一回事。在这种情况下,它是一个OLE自动化(IDispatch)接口,所以我不只是在返回的对象上调用方法,我调用了IDispatch的Invoke方法。从PowerShell与OLE自动化(IDispatch)服务器交谈

所以,无论如何,只是想知道是否有人可以指点我做一些样品,以便我可以用作起点。

回答

1
$a=new-object -com .... 
[System.__ComObject].invokemember(<Method>,[System.Reflection.BindingFlags]::invokeMethod,$null,$a,<args>) 
[System.__ComObject].invokemember(<Property>,[System.Reflection.BindingFlags]::GetProperty,$null,$a,<args>) 
+1

这是一个很好的开始 - 我最初在Google上搜索时发现类似于此的代码。但不知道将如何解决您在OLE自动化界面中遇到的各种类型。 VARARG是否有PowerShell封装?这就是为什么我希望找到一些真正与Powerhell中的OLE自动化对象接口的示例,以了解它们如何处理参数(进出)以及所有参数。 – Nerdtron 2012-03-24 16:21:49

+0

尝试使用OLE自动服务器上显示的InvokeMember没有任何运气。任何人都有正确使用这个例子吗? – Nerdtron 2012-04-03 18:37:02

+0

永远不要想到这一点 - 有一个COM接口的一个独特的问题,它接受params - 看起来这不是你可以直接从PowerShell调用的东西。 – Nerdtron 2012-09-28 19:29:31

-1

我建议使用Get-Member来反射对象并发现可用的方法。你有关于我们在这里讨论的具体COM对象的其他信息吗?它是否内置于Windows或第三方COM对象中?

+0

但这是一个OLE自动化接口(IDispatch接口);单个方法不在接口中,您只需使用invoke方法并告诉它在服务器对象中触发什么方法。 – Nerdtron 2012-03-24 16:18:41