スケジュールされたPowershellスクリプトが途中で停止することがある

スケジュールされたPowershellスクリプトが途中で停止することがある

スケジュールされた PowerShell スクリプトがいくつかあり、通常は問題なく実行されます (スケジュールされたタスクとして、および手動で実行した場合の両方)

時々、スクリプトの途中で動作が停止してしまうという問題があります。

私のスクリプトの 1 つは次のようになります。

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
**********************   

ループの途中で停止しただけであること (すべてのデータが完了していない)、および書き込みホストの「Finished」が呼び出されなかったことに注意してください。

興味深いと思ったのは、PowerShell が何らかの方法でトランスクリプト ファイルを閉じ、最後の 4 行を書き込んだことです。

メモリ不足になっているのではないかと推測していますが、本当にそうなっているのかどうかはわかりません。

トラブルシューティングのヒントがあればいただければ幸いです。

答え1

ループ内のコードは純粋な PowerShell ですか、それとも呼び出しですかsomeCrazy.exe? 一部の奇妙な exe は標準出力ではなくコンソールに書き込みますが、そのような種類のエラーはトランスクリプトではキャプチャされません。そのようなエラー テキストをキャプチャできる CMD で PowerShell をラップしてみてください。

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

Re: 「終了」がありません。Stop-transcriptこれはトランスクリプトを終了する 1 つの方法です。ループ内のエラーが原因で PowerShell が終了している可能性があります。タスク スケジューラによって生成されたトランスクリプトは、通常の終了メッセージで停止しますpowershell.exe

答え2

それで、(恥ずかしい)答えは、これは私の間違いだったということです。

Windows タスク スケジューラでは、時間制限を設定できる場所が複数あります。1 つはメインのタブ セット全体ですが、指定したタスクごとに時間制限を設定することもできます。

スクリプトを毎日実行するようにスケジュールされたタスクを設定するときに、最大 1 時間実行するように設定しました。

したがって、すべてのタスクを総合すると最大 4 時間かかる可能性がありますが、PowerShell を起動する特定のサブタスクは 1 時間に制限されます。

確認したときに 4 時間設定になっているのに気づきませんでした。

  • ジャック

関連情報