2010-10-19 35 views
1

我想用PowerShell 2.0腳本Powerpoint。Powershell 2事件處理

site說有一個「PresentationOpen」事件。但是,Get-Member不顯示此事件。此外,當我嘗試這樣做:

register-objectevent $application PresentationOpen notification_event 

它說:「無法註冊事件名爲‘PresentationOpen’不存在的事件。」

爲什麼無法從PowerShell訪問此事件?我做錯了,還有另一種方式嗎?

我真正想做的是等到演示文稿完全加載後再保存爲另一種格式。不等待會導致PPT有時會凍結。

我很感激任何幫助!

+0

您可以添加您嘗試使用的整個代碼塊嗎? – Goyuix 2010-11-03 15:36:32

+0

我嘗試了下面在Powershell 2.0中發佈的代碼。 – 2010-11-04 16:29:41

回答

0

PowerShell在COM支持方面很弱(它更像C#而不是VB)。在這種情況下,您必須委派事件。此頁面上看到的急件:http://support.microsoft.com/kb/308825/EN-US/

+0

謝謝你的回答。我在PowerShell中是個不識字的人,所以我不知道現在該怎麼做,這對我來說有點過分了。 :) – 2010-10-20 17:10:44

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 cmdlet處理它,否則只需在Open()方法調用後添加一個類似於此權限的循環即可阻止進一步的腳本執行,直到幻燈片打開完成:

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

感謝您的答覆。但是當我嘗試這樣做時,我得到:Register-ObjectEvent:無法註冊事件。名稱爲'presentat ionOpen'的事件不存在。 – 2010-11-03 11:27:02