タスクスケジューラで、タスク自体は正常に完了しますがpowershellファイル(ps1ファイル)が正常に実行できなかった事象が起きました。
解決まで少し苦戦したのでその時のメモを残しておきます。
1.事象:タスクは完了するのに実際にスクリプトは動いていない
タスクスケジューラで以下の設定を入れてタスクを作成しました。
- 「プログラムで開始」を選択して「C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe」を指定
- 引数として「-Executionpolicy Bypass -File ‘C:\task\test.ps1’」を指定
- 作業ディレクトリ(開始(オプション))に「C:\task」を指定
このタスクを実行しますが、上手くスクリプトが起動しませんでした。
また、タスクの履歴には正常に完了したと記載されており原因特定も難しい状況でした。
2.原因
引数で実行するpowershellファイルを指定する際にシングルクォーテーション(‘)を利用していたのが原因でした。
-Executionpolicy Bypass -File 'C:\task\test.ps1'
3.解決方法
ダブルクォーテーション(“)に変更すると正常に実行できるようになりました。
-Executionpolicy Bypass -File "C:\task\test.ps1"
[参考] その他の確認観点
その他の確認観点としては以下があります。
①スクリプトの記載は正しいか?
スクリプト内の記載内容が誤っている可能性もあります。
誤字脱字があるとそもそもスクリプトのエラーとなりますのでこの観点でも注意が必要です。
実際にスクリプトの中身を手動で実行させてみて正常に実行されるかどうかを見てみるとよいです。
特にパスの指定などを誤ると、スクリプト自体は正常に完了しますが想定された動作にならないという事象につながります。
②ExecutionPolicyは適切か?
引数の追加(オプション)で以下のように設定されていれば問題ありません。
-ExecutionPolicy Bypass -File "C:\task\test.ps1"
③開始(オプション)でスクリプトがあるフォルダのパスが指定されているか?
指定されていれば問題ありません。(例:C:\task)
④「最上位の特権で実行する」になっているか?
タスクの「全般」タブでチェックを入れることで設定できます。
⑤powershell.exeはフルパスか?
基本的にフルパスでなくても実行可能かとは思いますが、フルパスにするとこの観点でのエラーは確実に防げるので試してみるといいと思います。