質問: スクリプトは自動停止しないため、タスクスケジューラにて指定時間経過後にプロセスを強制終了させようとしていますが、強制終了してくれません。 ### 前提・実現したいこと OSは Windows 10 Pro 1803 です。 PowerShellスクリプトをタスクスケジューラに登録し、定期実行させようとしています。 PowerShellスクリプト内では別のexeを実行してその結果をファイルに書き出しています。(実際には他の処理を書いていますが以下の単純なスクリプトで再現できたため、あえてこのような内容にしています) ``` & ping -t localhost | Out-File "test.txt" ``` タスクスケジューラでは、実行するプログラムに `C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe` を指定し、その引数には `-NoProfile -ExecutionPolicy Unrestricted "PowerShellスクリプトファイル"` を指定しています。 「トリガー」タブ内の設定ではタスクの繰り返し間隔を、「設定」タブでは「タスクを停止するまでの時間」を指定して、途中でタスクが強制終了するようにしています。 ### 発生している問題 スクリプトはちゃんと実行されますが、指定時間経過後もスクリプトが終了されずに実行され続けてしまっています。 タスクマネージャで確認すると、タスク実行時にはきちんとプロセスが立ち上がり正常に動いています。 ![タスク実行時](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/fc4b742fc1411b64a0a7127e543855c1.png) 指定時間経過時、タスクスケジューラのログ上は「タイムアウトに達したため、タスクが停止しています」と表示されています。 しかし、PowerShellのプロセスとコンソールウィンドウホストのプロセスは終了しているのですが、スクリプトから呼び出しているプロセス(Ping)は残ってしまいます。スクリプトを実行しているウィンドウも消えずそのまま残ってしまいます。 ![指定時間経過時](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/3e0bba9b624af1f9c00c94d59508ffa2.png) タスクスケジューラで指定したタイムアウト時間で、スクリプトから呼び出しているプロセスも一緒に強制終了させることはできないでしょうか。
回答: タスクスケジューラで強制終了させるのをやめ、スクリプトで終了させてください。 以下のスクリプトで 30 秒後に終了するのを確認しました。 ``` $job = Start-Job -ScriptBlock { ping -t localhost | Out-File "test.txt" } Start-Sleep 30 Stop-Job $job ```