繁体   English   中英

Powershell 2事件处理

[英]Powershell 2 event handling

我正在尝试使用Powershell 2.0编写Powerpoint脚本。

网站说有一个“ PresentationOpen”事件。 但是,Get-Member不显示此事件。 另外,当我尝试执行此操作时:

register-objectevent $application PresentationOpen notification_event

它说:“无法注册事件。名称为'PresentationOpen'的事件不存在。”

为什么无法从PowerShell访问此事件? 我做错了吗,还有另一种方法吗?

我真正想做的是等到演示文稿完全加载后再将其保存为另一种格式。 不等待有时会导致PPT冻结。

感谢您的帮助!

PowerShell对COM的支持非常薄弱(它比CB更像C#,而不是VB)。 在这种情况下,您将必须委托事件。 请参阅此页面上的调度: http : //support.microsoft.com/kb/308825/EN-US/

可能还有其他(更好的)方法可以这样做,但这应该可以帮助您入门:

$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 cmdlet处理它,否则,您可以在Open()方法调用之后直接添加与此类似的循环以阻止进一步的脚本执行,直到滑板已完成打开:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM