我在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中,我无法让它发挥作用。
答案 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中成功完成了这个。