我需要为CivicFactory对象的NewCivicAddressReport事件实现事件处理程序。 这下面的代码,使用事件处理程序命名约定,完美的作品在VBScript:PowerShell 2.0是否支持COM事件处理程序?
Dim CivicFactory
Set CivicFactory = WScript.CreateObject("LocationDisp.CivicAddressReportFactory", "CivicFactory_")
Function CivicFactory_NewCivicAddressReport(report)
MsgBox "Location changed!"
End Function
在PowerShell中
但是下面的代码失败:
$CivicFactory = new-object -comObject LocationDisp.CivicAddressReportFactory
Register-ObjectEvent $CivicFactory -EventName "NewCivicAddressReport" -Action ({ echo "hello" })
错误消息:注册-ObjectEvent:不能注册事件。名称为“NewCivicAddressReport”的事件不存在。
我也试过$CivicFactory.add_NewCivicAddressRerport({"hello"})
,也失败了。
所以我转向$CivicFactory | Get-Member
:它确实返回它的方法和属性,但没有事件。
所以我怀疑PowerShell不太支持COM事件。我安装了pseventing snapin并尝试Get-EventBinding CivicFactory -IncludeUnboundEvents | Format-Table -Auto
- 它什么都没有返回,这意味着系统不相信这个对象有事件。
所以现在我怀疑:是否有可能将事件处理程序绑定到对象?
任何人都可以告诉我正确的方法吗?
请更新PSeventing! SetACL的COM版本(http://helgeklein.com/setacl)也遇到OP描述的问题。 – 2011-05-11 08:16:02