В PowerShell Как реализовать обработчик событий для COM-объектов? - PullRequest
1 голос
/ 26 апреля 2011

У меня был созданный COM-объект в PowerShell: $ 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 ]

1 голос
/ 10 июня 2016

Используйте сборку Interop, сгенерированную Visual Studio.

Всякий раз, когда ссылка COM (библиотека) добавляется в проект C #, среда IDE создает оболочку, которая делает все объекты, включая события и перечисления, доступными для.Чистый мир.

Оболочка обычно упакована в файл с таким именем:

Interop.<COM-library-name>.dll

Обратите внимание, что имена классов могут отличаться.Используйте дизассемблер IL (ildasam.exe), чтобы определить класс, который необходимо создать.

1 голос
/ 26 апреля 2011

Вас может заинтересовать PSEventing , он предназначен для обработки событий объектов .NET, COM и WMI.

0 голосов
/ 28 апреля 2011

Я пробовал Get-Member: $CivicFactory | Get-Member -MemberType Event Но ничего не вернулось.

Если я запускаю Get-Member без указания типа члена, он возвращает свои методы и свойства. И методы и свойства работают хорошо, поэтому я считаю, что объект в порядке.

Похоже, что события объекта не распознаются системой PowerShell.

Но в документе говорится, что обработчик событий NewCivicAddressReport должен быть реализован, и я успешно сделал это в VBScript и JScript.

...