計劃的 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 的特定子任務被限制為一個小時。

當我檢查並看到 4 小時設定時,我錯過了這一點。

  • 傑克

相關內容