
スケジュールされた 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 時間設定になっているのに気づきませんでした。
- ジャック