在PowerShell中,如何实现COM对象的事件处理程序?

时间:2011-04-26 13:05:43

标签: events object com powershell handler

我在PowerShell中创建了一个COM对象: $ CivicFactory = new-object -comObject LocationDisp.CivicAddressReportFactory

我需要为“NewCivicAddressReport”实现事件处理程序。我试过这个:

Register-ObjectEvent $CivicFactory -EventName "NewCivicAddressReport" -Action ({ echo "haha" })

但它给了我"Register-ObjectEvent : Cannot register for event. An event with name 'NewCivicAddressReport' does not exist."

然后我尝试了$CivicFactory.add_NewCivicAddressRerport( {"haha"} )

它也不起作用:方法调用失败,因为[System.__ComObject#{bf773b93-c64f-4bee-beb2-67c0b8df66e0}] doesn't contain a method named 'add_NewCivicAddressRerport'

有人能告诉我如何在PowerShell中实现此事件处理程序吗?提前致谢。 在VBScript中,它就像

一样简单
Function CivicFactory_NewCivicAddressReport(report)
    Blablabla...
End Function

但在PowerShell中,我无法让它发挥作用。

3 个答案:

答案 0 :(得分:1)

您可能对PSEventing感兴趣,它会解决.NET,COM和WMI对象事件处理问题。

答案 1 :(得分:1)

使用Visual Studio生成的Interop程序集。

每当将一个COM(库)引用添加到C#项目时,IDE就会构建一个包装器,使.NET世界可以使用所有实体,包括事件和枚举。

包装器通常打包在一个名为this:

的文件中
Interop.<COM-library-name>.dll

请注意,类名可能不同。使用IL反汇编程序(ildasam.exe)来标识必须实例化的类。

答案 2 :(得分:0)

我试过Get-Member:$CivicFactory | Get-Member -MemberType Event 但它没有任何回报。

如果我在不指定成员类型的情况下运行Get-Member,它会返回其方法和属性。方法和属性运行良好,所以我相信对象没问题。

因此看起来PowerShell系统无法识别对象的事件。

但文档说明应该实现事件处理程序NewCivicAddressReport,并且我已经在VBScript和JScript中成功完成了这个。