Обработка событий в Powershell 2 - PullRequest
1 голос
/ 19 октября 2010

Я пытаюсь создать сценарий Powerpoint с помощью Powershell 2.0.

Этот сайт сообщает, что есть событие "PresentationOpen". Однако Get-Member не показывает это событие. Кроме того, когда я пытаюсь сделать это:

register-objectevent $application PresentationOpen notification_event

там написано: «Невозможно зарегистрироваться для события. Событие с именем PresentationOpen не существует».

Почему это событие недоступно из PowerShell? Я делаю это неправильно, и есть другой способ?

Что я действительно пытаюсь сделать, так это дождаться полной загрузки презентации, прежде чем сохранить ее в другом формате. Не ожидание иногда заставляет PPT зависать.

Я благодарен за любую помощь!

Ответы [ 2 ]

0 голосов
/ 03 ноября 2010

Могут быть и другие (и лучшие) способы сделать это, но вам следует начать:

$ppa = New-Object -ComObject PowerPoint.Application
$eventId = Register-ObjectEvent $ppa PresentationOpen -Action { "Hi" }
$ppa.Visible = 1
$ppa.Presentations.Open("Path\To\Presentation.ppt")

Вы можете заменить блок скрипта после -Action во второй строке любым кодомбудет выполнять обработку / сохранение.

Если есть какие-либо выходные данные вашего зарегистрированного события, вы можете обработать его с помощью командлета Receive-Job, в противном случае вы можете просто добавить цикл, аналогичный этому праву.после вызова метода Open (), чтобы заблокировать дальнейшее выполнение скрипта до тех пор, пока колода слайдов не закончит открываться:

While ((Get-Job $eventId).State -neq "Completed") { Start-Sleep -m 250 }
Receive-Job $eventId
0 голосов
/ 19 октября 2010

PowerShell довольно слаб в поддержке COM (это больше похоже на C #, чем на VB). В этом случае вам придется делегировать событие. Смотрите рассылки на этой странице: http://support.microsoft.com/kb/308825/EN-US/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...