2010-10-19 38 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