2010-10-19 5 views
1

Я пытаюсь создать сценарий Powerpoint с Powershell 2.0.Обработка событий Powershell 2

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

register-objectevent $application PresentationOpen notification_event 

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

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

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

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

+0

Не могли бы вы добавить весь блок кода, который вы пытаетесь использовать? – Goyuix

+0

Я попробовал код, который вы разместили ниже в Powershell 2.0. –

ответ

0

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

+0

Благодарим вас за ответ. Я очень неграмотен в PowerShell, поэтому я понятия не имею, что делать сейчас, это слишком сложно для меня. :) –

0

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

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

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

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

While ((Get-Job $eventId).State -neq "Completed") { Start-Sleep -m 250 } 
Receive-Job $eventId 
+0

Спасибо за ответ. Но когда я пытаюсь это сделать, я получаю: Register-ObjectEvent: не могу зарегистрироваться для события. Событие с именем «Presentat ionOpen» не существует. –

Смежные вопросы