使用任务计划程序运行Powershell脚本在"运行时是否冻结用户是否已登录"模式

时间:2017-10-25 15:25:46

标签: powershell outlook scheduled-tasks taskscheduler

我目前有一个可以访问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应用程序的实例。

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

1 个答案:

答案 0 :(得分:0)

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

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。请在Considerations for server-side Automation of Office文章中详细了解相关内容。

作为一种解决方法,您可以考虑使用低级API - 扩展MAPI。或者只是围绕该API的任何其他第三方包装器,例如Redemption。