
我有一些已計劃的 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 小時設定時,我錯過了這一點。
- 傑克