繁体   English   中英

在“运行是否登录用户”模式下,使用任务计划程序运行Powershell脚本会冻结

[英]Running Powershell script using Task Scheduler freezes when in “Run whether user is logged in or not” mode

我目前有一个可以访问Microsoft Outlook的Powershell脚本,我希望每x分钟自动执行一次。 对于后一部分,我在任务管理器中创建了一个任务,该任务触发以下命令:

Powershell.exe -windowstyle minimized -c "powershell -c [PATH_TO_SCRIPT] -verbose >> [PATH_TO_LOG]"

这很好用,除了以下问题外,即使使用-windowstyle minimized标志,它仍然会短暂打开一个powershell窗口,该窗口在2秒钟左右后消失到后台。 解决此问题的方法是更改​​“任务计划程序”中的设置,并选中“运行用户是否已登录”。 但是,到那时,我的脚本不再执行了。 从日志中,我发现脚本运行良好,直到以下行:

$outlook = New-Object -ComObject Outlook.Application

打开Outlook应用程序的行。 我不确定“无论用户是否登录都可以运行”选项的实际作用,但是无论如何,它都无法再访问我的Outlook应用程序的实例。

鉴于我实际想要实现的目标,我可以调整脚本或任务来解决此问题,还是有其他方法可以解决此问题?

Microsoft当前不建议也不支持任何无人参与的非交互客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT Services)中的Microsoft Office应用程序自动化,因为Office可能表现出不稳定的行为和/在此环境中运行Office时出现死锁或死锁。

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用对无人值守执行安全的组件。 或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。 如果您从服务器端解决方案中使用Office应用程序,则该应用程序将缺少许多成功运行所需的功能。 此外,您将承担整体解决方案稳定性的风险。 在《 服务器端Office自动化注意事项》一文中了解有关此内容的更多信息。

解决方法是,您可以考虑使用低级API-扩展MAPI。 或围绕该API的任何其他第三方包装,例如“兑换”。

暂无
暂无

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

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