本稿は,Windows環境でバックアップの自動化を検討している方や,タスクスケジューラの実務利用を想定している方向けにまとめています。
今回は特定の操作を定期的に実行する方法を,robocopyを例として紹介します。
robocopyに限らず,定期的に実行したい処理もあるかと思います。
毎回のように手作業でコマンドやスクリプトを実行するのも手間ですよね。
上記を解決してくれるのが「タスクスケジューラ」です!
本稿を理解して,特定の操作を自動実行する方法を理解いただけたら幸いです。
また,手動では問題なく動作しても,タスクスケジューラ経由だと動かない場合もよくあります。
上記に焦点を当てた解説と,実務でつまずきやすいポイントもあわせて紹介します。
前提知識
タスクスケジューラ

指定したプログラム(アプリ,プログラム等)を,設定した日時や曜日に自動実行するための機能です。
Windowsであれば標準で備わっています。
なお,UNIXでは,同等機能としてcrontab(クーロンタブ)があります。
実務での利用
バックアップ(robocopy),ActiveDirectoryログオン状況取得,ウイルススキャン等,定期的に特定のプログラムを実行する際にタスクスケジューラをよく利用します。
昼間だけでなく,夜間に実行登録することも可能です。
夜間に実行することで,昼間の負荷を軽減すると同時に負荷の少ない時間帯での実行による安定稼働を実現できます。
カオリ夜中にも実行できるんですね!



もちろん!ただ,設定した端末を起動しておく必要はあるから注意してね!
設定方法
- スタートメニューから「タスク スケジューラ」を選択します。


- 「タスク スケジューラ」にて,画面左側の「タスク スケジューラ ライブラリ」を選択します。


- 「タスク スケジューラ ライブラリ」を右クリックのうえ,「タスクの作成」を選択します。


- 「タスクの作成」の「全般」タブにて,必要項目を設定します。
今回は以下のように設定します。
・名前
→日次夜間バックアップ
・タスクの実行時に使うユーザーアカウント
→(現在ログイン中のアカウント)
・「ユーザーがログオンしているかどうかにかかわらず実行する」
→有効(実行ユーザがログアウトしていても実行可能)
・「最上位の特権で実行する」
→有効(管理者権限で実行可能)

- 「タスクの作成」の「トリガー」タブにて,「新規」を押下します。


- 「新しいトリガー」にて,必要項目を設定のうえ「OK」を押下します。
今回は毎日0時に実行するよう設定します。
毎週月曜~金曜等の設定も可能です。
詳細設定も,必要に応じて設定します。

- 「タスクの作成」の「トリガー」タブにて,設定が反映されていることを確認します。


- 「タスクの作成」の「操作」タブにて,「新規」を押下します。


- 「新しい操作」にて,必要項目を設定のうえ「OK」を押下します。
今回は以下のように設定します。
・プログラム/スクリプト
→powershell
・引数の追加
→-ExecutionPolicy Bypass “D:\tool\robocopy.ps1”
※「-ExecutionPolicy Bypass」の詳細は別途説明します。
powershellで実行する場合は要設定の場合があります。
・開始
→D:\tool(スクリプト開始時のディレクトリを指定)
※スクリプト内で相対パスを使用している場合は設定必須です。

- 「タスクの作成」の「操作」タブにて,設定が反映されていることを確認します。


- 「タスクの作成」の「条件」タブにて,必要項目を設定します。
今回は初期状態のままにします。

- 「タスクの作成」の「設定」タブにて,必要項目を設定します。
今回は初期状態のままにします。

- 「タスクの作成」にて「OK」を押下します。


- 「タスク スケジューラ」にて,実行ユーザの「パスワード」を入力のうえ「OK」を押下します。


- 「タスク スケジューラ ライブラリ」の一覧に反映されたことを確認します。


実務での設定方針
robocopyに限らず,どのプログラムも基本的には夜間に実行登録するのが望ましいです。
robocopyの場合,容量の大きいフォルダやファイルのコピーをしたりと,メモリやネットワークへの負荷が大きくなる傾向にあります。
したがって,昼間では過大な負荷によって業務に支障が出る可能性も比較的高いです。
比較的負荷の少ない時間帯(深夜0時等)に設定することで,昼間の業務に影響が出ないよう注意しましょう。
設定次第で実行ユーザはログアウトしていても問題ありませんが,端末は起動したままにしておく必要があります!
注意点
実行プログラムの成否
イベントログで確認できます。
ただし,イベントログでは詳細が分かりづらいため,プログラム側で実行ログを出力するよう設定しておきましょう。
初回稼働
タスクスケジューラは設定しても意図通りに実行されないこともあるため,初回は手動での動作確認を推奨します。
タスクスケジューラでrobocopyが動かないときの対処法
タスクスケジューラでrobocopyを自動化した際,「手動では動くのにタスクだと動かない」事態はよく起こりうることです。
実務でよくある原因と対処方法をまとめます。
なお,最初にタスクの実行結果をタスクスケジューラの「履歴」や「最終実行結果」から確認しましょう。
原因特定はログ確認が最優先です。


タスクスケジューラでタスクが実行できない場合
- 実行ユーザの権限不足(管理者権限等)
- 「最上位の特権で実行する」未チェック
タスクは実行できるがrobocopyが失敗する場合
- 「開始(作業フォルダ)」設定誤り(プログラム内で相対パス使用等)
robocopyのエラーコード(0,1,3,8など)が原因の場合は,以下の記事も併せてご参照ください。


タスクは正常終了するがファイルがコピーできていない場合
- プログラム内でのコピー元・コピー先パス指定(Z:ドライブを指定しており,タスク実行時には認識されず失敗等)
特に,ネットワークドライブの使用は特に注意が必要です。
タスクスケジューラでは,ネットワークドライブ(Zドライブ等)を正しく認識できない場合があります。
エクスプローラー上では見えていても,タスクスケジューラ実行時には別セッション扱いとなるためです。
UNCパス(「\\(サーバ名)\~」等)に修正して実行してみましょう。
まとめ
タスクスケジューラは作業を自動化するうえで非常に有用な機能です。
特に,夜間に実行したいプログラムがある場合は,タスクスケジューラがものすごく役立ちます。
とはいえ,タスクスケジューラでの自動化は便利ですが,権限や実行環境の違いにより想定通り動作しないこともあります。
タスクスケジューラでrobocopyが動かない場合,多くは「権限・パス・実行環境」の違いが原因です。
「手動では動くがタスクでは動かない」場合は,本記事のチェックポイントを順に確認してみてください。
ぜひ本機能を駆使して,作業負荷の軽減を図りましょう!









