あいしんくいっとオススメ商品レビュー

Windowsのタスクスケジューラでタスクが動かない!そんなときに確認したい項目6選!

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

本記事対象者
Windowsのタスクスケジューラでタスクが動かない!とお悩みの方

ども。あいしんくいっと(@ithinkitnet)です。

ithinkit

タスクスケジューラが動かないのは何故だろう。

以前、Windowsタスクスケジューラの基本的な使い方を紹介しました。
Windowsタスクスケジューラの基本的な使い方について

タスク作成ウィザードに沿ってタスクスケジューラを設定したとしても「設定したタスクが正常に実行されない」なんてことは良くある話です。
なので、今回はタスクスケジューラが実行されない時に確認したいポイントを6つほど挙げておきたいと思います。

タスクスケジューラが動かないときに確認したい項目6選

実行対象のバッチ/スクリプトパスに間違いは無いか

「実行させたいバッチやスクリプトのパス指定を間違える」これは設定したタスクが正常に動作しない時によくあるイージーミスです。
タスクスケジューラで指定した場所にバッチ/スクリプトがなかったり、実行ファイル名が間違えていたり。
最初に疑うべきは「バッチ/スクリプトへのパス指定に間違いが無いか」です。

例えば、実行ファイル名が間違っていた場合、タスクスケジューラの履歴上は正常終了と出力されるものの、実際には実行されずにエラー「0x1」が出力されます。実行ファイルのパス指定が間違っていた場合も同様。
タスクスケジューラ 前回の実行結果 エラー「0x1」

注意
タスクスケジューラの履歴が無効になっている場合、下記の記事を参考にして有効化しておくと良いでしょう。

Windowsのタスクスケジューラで履歴が表示されない!そんな時は履歴の有効化をしよう。

「ユーザがログオンしている時のみ実行する」になっていないか

次にありがちなのが、タスクスケジューラの設定で「ユーザがログオンしている時のみ実行する」になっている場合。
この場合、ユーザがログインしてないとタスクが実行されず、ユーザがログアウトしてしまうとタスクが実行されない。
そのため、「ユーザがログオンしているかどうかにかかわらず実行する」に必ずチェックを入れておく。
タスクスケジューラ ユーザーがログオンしているときのみ実行

「最上位の特権で実行する」にチェックが入っているか

「最上位の特権で実行する」にチェックが入っているかどうか。このチェックも忘れがち。
「最上位の特権で実行する」にチェックが入っていないと、実行権限がないユーザ指定されたり、バッチ/スクリプトの内容によってタスク実行されなかったりする可能性があります。
なので、「最上位の特権で実行する」にチェックが入っていることを必ず確認しましょう。
タスクスケジューラ 最上位の特権で実行する

MEMO

バッチ実行ユーザーに実行権限が付与されているか確認してください。必要であれば、Administratorsグループに参加させるなど対応が必要です。

PowerShellで作成したスクリプトの指定に気を付けろ

タスクスケジューラを使ってPowerShellで作成したスクリプトを実行する場合、スクリプトを直接指定すると何故かnotepadが起動します。
なので、PowerShellの本体を指定して、引数としてスクリプトを設定する必要があります。

直接、PowerShellで指定したスクリプトを指定してタスクを起動すると、
PowerShellで指定したスクリプトを直接指定

何故かnotepad.exeが起動してしまう・・・。う~ん、馬鹿なのかw
(原因としては”プログラムの関連付け”がどう、とからしいが・・・)
タスクスケジューラでnotepad.exe起動

なので、PowerShellの本体を指定し、引数としてスクリプトを設定する必要があります。
PowerShell本体(実行モジュール)のパスは以下。

PowerShell本体のパス

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

PowerShell本体を指定、引数としてスクリプトを設定

パスに半角カッコ”()”が入っていないか

指定するパス及び、ファイル名に”()” (半角カッコ)が入っていると何故かタスク実行されないという現象が。。。
これは驚きでしたね。たぶんタスクスケジューラのバグなんでしょうけど。

例えば、ファイル名に半角カッコが入ったスクリプトを実行しようとすると、
ファイル名に半角カッコが入ったスクリプトを実行

履歴上は正常終了と出力されるものの、実際にはタスクが実行されずにエラー「0x1」が出力されます。
タスク実行されるが、実行エラー「0x1」

ちなみに”()” (全角カッコ)だと、
全角カッコだと正常にタスク終了

正常にタスク実行されます。
windows-taskschd-error-7-20150829-8
ログオン/ログオフスクリプトの設定については以下の記事を参考にしてください。
Windows Server 2012 R2でログオン/ログオフスクリプト設定(ついでにログオンスクリプト遅延問題も解決)

「コンピューターをAC電源で使用している場合のみタスクを開始する」のチェックは外しておこう

念のため、「コンピューターをAC電源で使用している場合のみタスクを開始する」のチェックは外しておくと良いかも。
コンピューターをAC電源で使用している場合のみタスクを開始するのチェック外す

実行間隔は5分は空けよう

タスク実行をテストする時、現在時刻よりも1分後とか、2分後とか、やりがちです。
タスクスケジューラ設定時刻

ithinkit

数こなしたい時は1分後とか、設定しがち・・・。

タスクスケジューラの実行間隔は少なくとも3分は空けないと正常に実行されません。余裕をもって5分後とかにすると良いと思います。

実行日が過去日付になっていないか

実行日が過去日になっていた場合、当たり前ですがタスクは実行されません。
念のため、確認してみてください。

OSの時間がズレてないか

時間通りに動かない場合、OSの時刻合ってるか確認してください。
NTP時刻同期とかしてないと時刻ズレが発生していて、時間通りに動かないといった初歩的なミスも考えられます。

バッチに「pause」や「sleep」はないか

バッチやPowerShell作成時に「pause」や「sleep」を使うことがあるのですが、それらのコマンドが入ったまま、タスクスケジューラで動かそうとすると当然止まります。「pause」や「sleep」が含まれていないか確認し、あれば取り除いてください。


では、最後にタスクスケジューラが動かない時に確認したい項目をまとめておきます。

タスクスケジューラが実行されないときに確認したい項目6選
  1. 実行対象のバッチ/スクリプトパスに間違いは無いか
  2. ユーザがログオンしている時のみ実行する」になっていないか
  3. 「最上位の特権で実行する」にチェックが入っているか
  4. PowerShellで作成したスクリプトの指定に気を付けろ
  5. パスに半角カッコ”()”が入っていないか
  6. 「コンピューターをAC電源で使用している場合のみタスクを開始する」のチェックは外しておこう
  7. 実行間隔は5分は空けよう
  8. OS時刻にズレがないか
  9. 実行日が過去日付になっていないか
  10. バッチに「pause」や「sleep」はないか
Point

RoboCopyバッチをタスクスケジューラで起動した場合、正常に動いても実行結果が「ファンクションが間違っています。(0x80070001)」となる謎の事象に遭遇。
ファンクション間違い
気持ち悪いけど、タスクスケジューラの仕様なのだろうか・・・。

Windowsを使うのであれば、タスクスケジューラを使う機会も多いと思います。タスクが実行されない時の確認ポイントをしっかりと把握しておくことでトラブルシューティングが捗りますので覚えておいてください。

ithinkit

タスクスケジューラが動かない!」って時はこの記事を参考にしてもらえれば幸いです。

タスクスケジューラのインポート/エクスポートはこちら。
Windowsのタスクスケジューラにおける一括エクスポート/インポートについて

以上、あいしんくいっとでした。

2 COMMENTS

通りすがり

こんにちは。
タスクスケジューラに指定して動かないからバクだと騒ぐ前に一度コマンドプロンプトに貼り付けて実行してみて正しいパス指定をしているかどうか確認することをおすすめします。下記の2つはタスクスケジューラの問題ではなく、パスの指定方法が間違っていたため発生したものです。

PowerShellで指定したスクリプトを指定してタスクを起動してnotepad.exeが起動したのは、実行したPCで、「.ps1」の関連付けがnotepad.exeとなっているからです。スクリプトをダブルクリックしたときの挙動と同じです。もし、スクリプトを指定して実行したのであれば、「.ps1」の関連付けをPowerShellに変更すればよいです。

パスに半角括弧が入ると実行できないのは半角括弧が引数における特殊文字だからです。同様にアンドとパイプ(|)も使えません。これらの文字を引数として使いたい場合は^を文字の前につけてエスケープする必要があります。「無題^(1^).ps1」と設定します。

返信する
あいしんくいっと

コメントありがとうございます。
テンパった時はそれらの事が冷静に判断出来ず、判断に困るので忘れないように備忘的な記事にした次第です。。
参考になる情報を色々と教えて下さり、非常に参考になりました^^

返信する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)