Events PowerShell 2.0是否支持COM事件处理程序?

Events PowerShell 2.0是否支持COM事件处理程序?,events,object,com,powershell,handler,Events,Object,Com,Powershell,Handler,我需要为CivicFactory对象的这个NewCivicAddressReport事件实现一个事件处理程序。 以下代码使用事件处理程序命名约定,可在VBScript中完美运行: Dim CivicFactory Set CivicFactory = WScript.CreateObject("LocationDisp.CivicAddressReportFactory", "CivicFactory_") Function CivicFactory_NewCivicAddressReport

我需要为CivicFactory对象的这个NewCivicAddressReport事件实现一个事件处理程序。 以下代码使用事件处理程序命名约定,可在VBScript中完美运行:

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" })
错误消息为:Register ObjectEvent:无法注册事件。名为“NewCivicAddressReport”的事件不存在

我还尝试了
$CivicFactory.add_newcivicaddressreReport({“hello”})
,但也失败了

所以我转向
$CivicFactory | Get Member
:它确实返回了它的方法和属性,但没有返回任何事件

所以我怀疑PowerShell不太支持COM事件。我安装了pseventing管理单元并尝试了
获取EventBinding CivicFactory-IncludeUnboundEvents | Format Table-Auto
-它没有返回任何内容,这意味着系统不相信此对象有事件

所以现在我怀疑:是否有可能将事件处理程序绑定到对象


有人能告诉我正确的方法吗?

如果没有可用的类型库,PowerShell无法很好地处理COM对象。缺少的不仅仅是事件,如果您尝试使用get member来探索实例,通常其他成员也不存在。总的来说,遗憾的是缺乏后期绑定支持,但这可能是因为powershell使用“适配器”向运行时公开对象成员的方式。您可以使用InvokeMember以后期绑定的方式调用成员。看看:

我以为我已经完成了PSEventing,但似乎v2.0还有空间可以处理后期绑定的事件。嗯

我不是说COM事件不工作,它们工作得非常好,但只有在有互操作或类型库可用的情况下

-奥辛
(pseventing的作者)

请更新pseventing!SetACL()的COM版本也存在OP描述的问题。