最近Windowsでバッチを定期的に実行する設定をすることがありました。Linuxならcronを使えばよいですが、Windowsでは「タスクスケジューラー」を使うことになります。いざ設定しようとすると項目がまぁまぁ多いし、なんかよくわからないものもあったり……。
Windowsタスクスケジューラーは指定したタイミングでアプリやスクリプトを自動実行できるWindowsの標準機能です。
この記事では、タスクスケジューラーの「タスクの作成」画面で設定できる項目をすべて調べてみました。3歩歩けば忘れる自分のためのメモでもあるので、専門用語もできるだけ噛み砕いて説明していきますね。
cronとの違い
| 項目 | Windowsタスクスケジューラー | cron |
|---|---|---|
| OS | Windows | Linux |
| GUIの設定画面 | あり | 基本なし |
| 設定難易度 | 低め | やや高い |
| イベント実行 | 可能 | 基本時刻ベース |
設定をPowerShellのコードで管理したい場合やWSLでcronを使いたい場合は、それぞれの向き不向きも確認してみてください。GUIでの設定を含めた3つの方法をこちらの記事で比較しています。


タスクスケジューラーの起動方法
Win + Rを押して「ファイル名を指定して実行」が起動したらtaskschd.mscと入力して実行します。これでタスクスケジューラーのメイン画面が表示されます。


左側のフォルダツリーには既存のタスクが階層的に整理されています。右側の「操作」パネルに「基本タスクの作成」と「タスクの作成」の2つがありますが、詳細な設定ができるタスクの作成を使っていきます。
タスクの作成:5つのタブを理解しよう
「タスクの作成」をクリックすると5つのタブを持つウィンドウが開きます。
| タブ名 | 役割 |
|---|---|
| 全般 | タスクの名前や実行権限を設定 |
| トリガー | いつ・どんな条件で実行するかを設定 |
| 操作 | 何を実行するか(プログラムやスクリプト)を設定 |
| 条件 | 追加の実行条件(電源状態など)を設定 |
| 設定 | タイムアウトや多重起動の制御など細かい挙動を設定 |
全般タブ:タスクの基本情報と実行権限
全般タブではタスクの「名前」や「誰の権限で実行するか」といった基本的な情報を設定します。


基本設定
- 名前
タスクの名前を入力します。ファイル名のようなもので動作には影響しません。後から見たときに何をするタスクか一目でわかる名前をつけておくと便利です。
- 場所
タスクが保存されるフォルダの階層です。通常は「\(ルートフォルダ)」ですがタスクが増えてきたらサブフォルダで整理することもできます。
- 作成者
このタスクを作成しているユーザー名(ログイン中のユーザー)が自動で表示されます。変更はできません。
- 説明
タスクに関するメモ書きです。動作には影響しないので自由に記載できます。数ヶ月後の自分が「これ何だっけ?」とならないように目的をメモしておくといいですよ。
セキュリティオプション
タスクが正しく動くかどうかに直結する重要な設定項目です。
- タスクの実行時に使うユーザーアカウント
このタスクを「誰の権限で」実行するかを指定します。別のアカウントで動かしたい場合は「ユーザーまたはグループの変更」から選択します。実行するアカウントと管理者権限で実行するかどうかはそれぞれ設定可能です。
- ユーザーがログオンしているときのみ実行する
PCにサインインしてデスクトップが表示されているときだけタスクが動きます。メッセージボックスの表示やExcelマクロの実行など画面上の動作が必要な場合に選択します。
- ユーザーがログオンしているかどうかに関わらず実行する
サインアウト中でもPCの電源が入っていればバックグラウンドで実行されます。夜間バックアップやシステムメンテナンスなど画面表示が不要な処理向けです。タスク保存時にパスワードを求められることがあります。
- パスワードを保存しない
パスワード入力なしで実行できますがネットワーク上のファイルにはアクセスできなくなります。
- 最上位の特権で実行する
指定したアカウントで利用できる最も高い権限でタスクを実行します。管理者アカウントでは「管理者として実行」に相当します。
システム全体の設定変更や管理者権限が必要なフォルダへの書き込みを行う場合に有効にします。実行エラーが出たときもまずは対象ファイルのパスやアクセス権を確認してください。
その他
- 表示しない
チェックを入れるとタスクスケジューラの標準画面からこのタスクが見えなくなります。通常はチェック不要です。
- 構成
タスクの互換性レベルを指定します。Windows 10 / 11を使っていても基本的にはデフォルトのままで問題ありません。新しいトリガー条件などを使いたい場合のみ「Windows 10」などに変更します。
トリガータブ:いつ・どんな条件で実行するか
トリガータブではいつ、どのような条件でタスクを動かすかを決定します。複数のトリガーを設定することも可能です。「新規」ボタンをクリックするとトリガー設定ウィンドウが開きます。


タスクの開始
ドロップダウンメニューで開始条件を選択します。以下では「ワークステーションロック時」と「ワークステーションアンロック時」をまとめて説明していますが、画面では別々の選択肢です。
- スケジュールに従う
- ログオン時
- スタートアップ時
- アイドル時
- イベント時
- タスクの作成/変更時
- ユーザーセッションへの接続時
- ユーザーセッションからの切断時
- ワークステーションロック時 / アンロック時
スケジュールに従う
指定した日時や頻度で定期的にタスクを実行する基本的なトリガーです。


- 開始
タスクを開始する日付と時刻を設定します。
- タイムゾーン間で同期
協定世界時(UTC)を基準にして実行されます。海外でPCのタイムゾーン設定が変わっても同じタイミングで実行させたい場合に使いますが通常はオフのままで大丈夫です。
- 1回
開始で指定した日時に一度だけ実行します。


- 毎日
毎日決まった時間に実行します。


- 毎週
特定の曜日(例:毎週月曜と水曜)に実行します。


- 毎月
特定の日(例:毎月1日・第2火曜日)に実行します。


ログオン時
ユーザーがPCにサインインした瞬間に実行する設定です。OutlookやTeamsなどを自動起動させたいときに便利です。
- 任意のユーザー
誰がこのPCにサインインしても実行されます。
- 特定のユーザー
指定した人がサインインした時だけ実行します。
スタートアップ時
Windowsの起動時にタスクを開始する設定です。ユーザーのサインインをきっかけにする「ログオン時」とは異なります。
実際に動き始めるタイミングは遅延設定や実行条件にも左右されます。ログイン画面が表示される前に必ず処理が終わるという設定ではありません。
| 開始条件 | 実行のきっかけ |
|---|---|
| スタートアップ時 | Windowsの起動。 |
| ログオン時 | 指定したユーザー、または任意のユーザーのサインイン。 |
アイドル時
WindowsがPCをアイドル状態と判断したときにタスクを開始します。アイドルの判定にはキーボードやマウスの操作だけではなくCPUやディスクの使用状況なども関係しますが、「何分間操作しなければ必ず実行される」という単純なタイマーではありません。アイドル中に実行するタスクの停止・再起動は「条件」タブで設定します。
イベント時
Windowsのイベントログに特定の記録が書き込まれた瞬間に実行されます。
- ログ
監視対象とするログの種類を選びます(System・Application・Security など)。
- ソース
そのイベントを発行した発生元を選びます(Kernel-Power・Windows Update など)。
- イベントID
発生した事象を特定する番号です。特定のエラーが発生したら通知するなどの自動化に使えます。
タスクの作成/変更時
このタスクを新しく登録したときや設定を変更して保存したときに実行します。遅延や繰り返しなどの詳細設定もあるため、必ず保存した瞬間に1回だけ動くとは限りません。設定変更だけのつもりでも処理が始まることがあるので、実行内容には注意してください。
ユーザー セッションへの接続時
ユーザーがPCにサインインしたりユーザー切り替えで戻ってきた時に実行されます。リモートデスクトップで再接続した時なども含まれます。
- 任意のユーザー
誰が操作しても実行します。
- 特定のユーザー
指定したユーザーが操作した時だけ実行します。
- リモートコンピューターからの接続
リモートデスクトップを使って別のPCから接続した時だけ実行します。
- ローカルコンピューターからの接続
実際にそのPCを直接操作している時だけ実行します。
ユーザー セッションからの切断時
ユーザーがPCから切断した時に実行されます。「サインアウト」とは異なり裏でプログラムが動いたまま接続だけ切る場合を指します。
リモートデスクトップのウィンドウを×で閉じた時や、ユーザーの切り替えを行った時などが該当します。リモートデスクトップの切断時に特定のアプリを自動終了させるといった用途に使えます。
ワークステーションロック時 / アンロック時
PCをロックした時(Windows + Lを押した時や放置して自動ロックされた時)、またはロック画面でパスワードやPINを入力してデスクトップに戻った時に実行されます。いずれも「任意のユーザー」と「特定のユーザー」を選択できます。
詳細設定
トリガーにはさらに細かい制御ができる「詳細設定」セクションがあります。
- 遅延時間を指定する(ランダム)
指定した時間の範囲内で実行タイミングをランダムに遅らせます。多数のPCが一斉にサーバーへアクセスして負荷がかかるのを防ぐ場合などに使います。
- 繰り返し間隔
一度トリガーが発動した後さらに一定間隔で繰り返し実行させたい場合に使います。「毎日9時に開始し1時間ごとに実行を12時間継続する」といった設定が可能です。
- 継続時間
繰り返し実行を続ける期間です。実行したプログラム1回分の制限時間ではないです。
- 繰り返し継続時間の最後に実行中のすべてのタスクを停止する
継続時間が終わった時点でまだ実行中の処理も停止する設定です。処理を最後まで終わらせたい場合は停止してよいか確認してから有効にしてください。
- 停止するまでの時間
タスクが何らかの理由で終了せず動き続けてしまった場合の安全装置です。「3日間」に設定すると処理が3日経っても終わらない場合に強制終了させます。
- アクティブ化 / 有効期限
このトリガーを有効にする日付・無効にする日付を指定できます。「来月末までは毎日実行するがそれ以降はスケジュールを無視する」といった場合に使います。
- 有効
このトリガーを有効にするかどうかのスイッチです。チェックを外すと設定を削除せずに一時的にスケジュールを止めておくことができます。
操作タブ:何を実行するか
操作タブでは、トリガーが発動したときに「何をするか」を設定します。


プログラムの開始(推奨)
「タスクの作成」画面からアプリやスクリプトを実行する場合はこの操作を選びます。
- プログラム/スクリプト
実行するプログラムを指定します。バッチファイルを実行する場合はここに
cmd.exeを指定し、バッチファイルのパスを「引数の追加」へ入力する方法があります。- 引数の追加(オプション)
プログラムへ渡すコマンドやファイルのパスを指定します。
cmd.exeの/cは指定したコマンドを実行した後に終了するオプションです。- 開始(オプション)
処理の基準となる作業フォルダを指定します。バッチ内で相対パスを使っている場合は特に重要です。
cmd.exeの保存先ではなくバッチがファイルを読み書きするときの基準にしたいフォルダを入力します。
タスクスケジューラーやコマンドプロンプトからps1ファイルを呼び出すときに使うpowershell.exe -Fileとpwsh.exe -Fileの違いはこちらで確認できます。


電子メールの送信(非推奨・使用不可)
タスク実行時に指定した内容でメールを送信する機能ですが現在は使用できません。
この機能はWindows 8 / Windows Server 2012で削除されました。またまたなんで存在(ry。Windows 10/11では「プログラムの開始」からメール送信用のスクリプトやツールを実行します。
利用するメールサービスの認証方式に対応したスクリプトやツールを用意します。なお、PowerShellのSend-MailMessageも現在は非推奨なので新しく作る処理では採用を避けてください。
メッセージの表示(非推奨・使用不可)
タスク実行時に画面上にポップアップメッセージを出す機能ですが、この操作も現在サポートされていません。またまたなんでs(ry
画面にメッセージを出したい場合は「プログラムの開始」からメッセージを表示するスクリプトなどを実行します。
サインイン中のユーザーにメッセージを表示するスクリプトを用意し、全般タブで「ユーザーがログオンしているときのみ実行する」を選びます。画面へ表示する処理では実行するユーザーとログオン状態も確認してください。
条件タブ:追加の実行条件を設定
条件タブでは、トリガー(時間やイベント)が発生したとしても「PCの状態がどういう時ならタスクを実行するか」という追加の制限を設定します。


アイドル
アイドル状態はユーザーの操作やPCの負荷などをもとにWindowsが判断します。
- 次の間アイドル状態の場合のみタスクを開始する
PCがアイドル状態のときだけタスクを開始するための条件です。ですが、画面にある時間指定は現在の仕様では使用されません。
なんで存在するんでしょう🤔「10分間」に設定しても、10分放置すれば必ず動くとは限りません。- アイドル状態になるのを待機する時間
アイドルになるまでの待機時間を指定する項目ですが、現在の仕様では使用されません。
またまたなんで存在す(略。画面に項目が残っているため注意してください。- コンピューターがアイドル状態ではなくなった場合は停止する
アイドル状態が終わったときにタスクを停止します。
- 再びアイドル状態になったら再開する
上の設定で停止したタスクを再びアイドル状態になったときに起動し直します。処理の途中から続きを再開するには実行するプログラム側にも対応が必要です。
電源(ノートPCで重要な設定)
- コンピューターをAC電源で使用している場合のみタスクを開始する
コンセントに繋がっている時だけ実行します。ノートPCで電源を繋いでいない時でも必ず実行させたい場合はこのチェックを外す必要があります。
- コンピューターの電源をバッテリに切り替える場合は停止する
タスク実行中にコンセントを抜いたらタスクを強制終了します。
- タスクを実行するためにスリープを解除する
予定時刻にPCのスリープを解除してタスクを実行したい場合にオンにします。動作にはPCがタイマーによる復帰に対応していることと、Windowsの電源設定で復帰が許可されていることも必要です。
オフの場合、このタスクのためにはスリープを解除しません。予定時刻を過ぎた後に実行するかは設定タブの「スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する」などの設定にも左右されます。
ネットワーク
- 次のネットワーク接続が使用可能な場合のみタスクを開始する
特定のネットワーク(インターネットや社内LANなど)に繋がっていないと実行しない設定です。データをクラウドにアップロードするなどインターネット接続が必須のタスクの場合にチェックを入れます。繋がっていない時に実行してエラーになるのを防げます。
設定タブ:タスクの細かい挙動を制御
このタブではタスクが失敗した時や長時間終わらない時の挙動など、トラブルシューティングに近い安全策を設定します。


- タスクを要求時に実行する
スケジュール以外のタイミングでも人間が手動で(右クリックして「実行」を選んで)タスクを動かすことができます。テスト実行のために必須です。
- スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する
予定時刻に開始できなかったタスクを後から実行できるようにする設定です。「すぐに」と書かれていますが、対象のタスクは実行待ちとして登録され、遅延を挟んで実行されます。Microsoftの仕様ではこの遅延の既定値は10分です。
- 再起動試行の最大数
タスクが失敗したときに何回まで再実行を試すかを指定します。途中まで処理できていた場合もあるため、同じ処理を繰り返して問題がないか確認してください。
- タスクが失敗した場合の再起動の間隔
エラーでタスクがコケた場合に自動でリトライ(再挑戦)させる設定です。
- タスクを停止するまでの時間
プログラムがずっと実行中のままの場合に停止させる設定です。「3日間」に設定するとタスク実行から3日経っても実行している場合に強制終了させます。
- 要求時に実行中のタスクが終了しない場合、タスクを強制的に停止する
手動でタスクを止めようとした時にプログラムが応答しなくても無理やり終了を許可する設定です。
- タスクの再実行がスケジュールされていない場合に削除されるまでの時間
すべてのトリガーの有効期限が切れた後、指定した時間が経過するとタスク自体を削除します。「最後に実行してから何日経ったか」で削除する設定ではありません。定期的に使い続けるタスクでは通常はオンにすることはないです。
- タスクが既に実行中の場合に適用される規則
前回のタスクがまだ終わっていないのに次の実行時間が来てしまった場合のルールです。開始しないにしておくと二重起動(同じ処理が2つ同時に走ること)を防げます。データの破損などを防ぐため通常はこの設定が安全です。
毎日バッチを実行する設定例
ここでは動作確認済みのバッチファイルC:\Scripts\sample.batを毎日9時に実行する例で設定します。ファイルのパスと実行時刻は自分の環境に合わせて変更してください。
- 「タスクの作成」を開き全般タブで名前を入力します。この例では「ユーザーがログオンしているときのみ実行する」を選びます。
- トリガータブで「新規」をクリックして「スケジュールに従う」「毎日」を選びます。開始時刻を9時にして保存します。
- 操作タブで「新規」をクリックして「プログラムの開始」を選びます。次の値を入力します。
| 項目 | 入力例 |
|---|---|
| プログラム/スクリプト | cmd.exe |
| 引数の追加 | /d /c ""C:\Scripts\sample.bat"" |
| 開始 | C:\Scripts |
/dはコマンドプロンプトに設定されたAutoRunコマンドの実行を無効にするオプションです。「開始」にはフォルダのパスを入力します。
条件タブでアイドルやAC電源の条件が今回の使い方に合っているか確認します。設定タブの「タスクを要求時に実行する」をオンにして、タスクを保存してください。
保存後は「タスク スケジューラ ライブラリ」で作成したタスクを選び、右クリックの「実行」で動作を確認します。「前回の実行結果」に加えて、出力ファイルなどバッチが行うはずの処理も確認してください。
手動実行を確認できたら、次は近い時刻を指定して自動実行も確認します。この例では指定したユーザーがサインアウトしている間は実行されません。
迷いやすいポイント
PowerShellのps1ファイルが「このシステムではスクリプトの実行が無効になっているため」というエラーで動かない場合は、実行ポリシーを確認してください。現在の設定を調べる方法とスコープごとの変更方法はこちらで解説しています。


まとめ
- 設定項目が多いけど、まずは実行するアカウント、実行日時、プログラムと作業フォルダを決めると設定しやすくなるよ。
- 保存したら手動で動作を確認してみてね。
- エラーが出たときは「前回の実行結果」と「履歴」を見ると設定を見直す手がかりになるよ。
なお、タスクスケジューラーと組み合わせて使うと便利なのがwingetコマンドです。アプリの一括更新を定期自動実行する、といった使い方もできますよ。








