计划的 Powershell 脚本有时会中途终止

计划的 Powershell 脚本有时会中途终止

我有几个已安排的 powershell 脚本,它们通常运行良好(作为计划任务,以及手动运行)

我遇到了一个问题,有时他们会在脚本执行到一半时停止工作。

我的一个脚本如下所示:

start-transcript
write-host "Starting!"
foreach($blah in $blahblah)
{
   write-host "    $blah"
}
write-host "Finished"
stop-transcript

奇怪的是,当我查看成绩单时,我发现了这种模式:

**********************
Windows PowerShell transcript start
Start time: 20170116055439
Username  : domain\user 
Machine   : PCNAME (Microsoft Windows NT 6.1.7601 Service Pack 1) 
**********************
Transcript started, output file is GetMSOLLicensestoCSVTranscript.txt
Starting!
    blahitem1
    blahitem2
    ...
    blahitem 37675
**********************
Windows PowerShell transcript end
End time: 20170116060001
**********************   

请注意,它只是在循环中间停止(它并没有完成所有数据)并注意写入主机“完成”从未被调用。

我发现有趣的是,powershell 仍然以某种方式关闭了记录文件并写下了最后 4 行。

我有点认为是内存不足了,但不知道如何判断是否真的发生了这种情况。

任何故障排除技巧都将受到赞赏。

答案1

循环内的代码是纯 powershell 还是调用someCrazy.exe?一些疯狂的 exe 会写入控制台而不是标准输出,并且这种错误不会被记录捕获。您可以尝试使用 CMD 包装 powershell,这可能会捕获这种错误文本。

CMD.EXE /C "powershell -file c:\your\script.ps1" 2>&1 > c:\temp\cmdWrapper.log

回复:缺少“完成”。Stop-transcript是结束转录的一种方式。循环内的错误很可能导致 powershell 退出。当powershell.exe任务调度程序生成的转录结束时,转录将以正常关闭消息停止。

答案2

好吧,所以(令人尴尬的)答案是这是我的错误。

在 Windows 任务计划程序中,您可以在多个地方设置时间限制 - 一个位于主选项卡集上,但您也可以为指定的每个任务设置时间限制。

当我设置计划任务以每天运行脚本时,我将其设置为最多运行 1 小时。

因此,虽然所有任务的整体组合可能需要长达 4 个小时,但启动 powershell 的特定子任务却限制在 1 小时内。

当我检查并看到 4 小时设置时,我错过了这一点。

  • 杰克

相关内容