首页 > 解决方案 > power-shell脚本的windows调度不可靠

问题描述

我每天都在尝试运行一个自动化的 powershell 脚本。但是我在让它持续可靠地运行时遇到问题,脚本本身运行良好,它让 Windows 调度程序持续运行它,这就是问题所在。

该脚本每天早上 1 点由 Windows 调度程序调用powershell.exe,命令参数如下:

-windowstyle Normal  -NoExit -file "d:\work\PwrShellScripts\FlmToDb_010.ps1"

一旦被调用,脚本将持续运行,直到晚上 11 点退出。

脚本本身工作可靠,但调度只工作十分之九,有时它会因错误而失败:

任务计划程序未启动任务“\DailyFlm”,因为同一任务的实例“{aa18e048-d8b2-4e16-8737-fc7babbb609e}”已在运行。

问题是,如何让脚本每天可靠地运行?

其他可能相关的信息......

这些参数-windowstyle Normal -NoExit意味着 powershell 脚本在命令窗口中运行(而不是作为后台进程),并且如果会话结束,该窗口将保持打开状态。

这样做有两个原因,首先,它提供进程实际运行的视觉指示,其次,如果进程失败,它允许检查错误消息。powershell 脚本不包含任何文件日志记录,因此在命令提示符下运行它还可以让我确认前几天的会话在停止时干净退出。

其中一个问题是,因为这个过程在 90% 的时间内都有效,所以如果我进行任何调整,我必须等待 10 天或更长时间才能确认它们是否真的有效!

我怀疑这个问题可能与-NoExit脚本退出时控制台保持打开 () 的事实有关。大多数情况下,windows 似乎都认识到虽然控制台仍然打开,但相关的脚本已经退出。

我的猜测是,它偶尔会决定,因为控制台是打开的,所以进程仍在运行。我无法发现日程安排正常的情况和不正常的情况之间的任何区别。

有什么建议么?

更新...调度程序平均每 10 天无法启动一次作业。我更愿意让脚本在前台运行,这样可以更轻松地监控它的进度,并且如果它确实失败了也很明显。

标签: windowspowershellscheduled-tasksscheduling

解决方案


相同的任务已经在运行。

该脚本在运行时可能会执行它应该做的事情,但是有一个缺陷......它没有正确关闭。这正是-NoExit你所说的问题。当您运行 powershell 任务时,进程名称是powershell.exe,并带有关联的进程 ID,这就是任务调度程序知道它是否完成的方式。

为了解决这个问题,我建议编写一个脚本来杀死所有powershell.exe进程并安排它在每天凌晨 12:55 运行。


推荐阅读