簡単そうでハマりやすい(と思う)Windows「タスクスケジューラ」をなるべく簡単に使えるように、サンプルファイルを用意しました。よく使うと思われるシンプルな設定としているので、まずはインポートして、日時や実行プログラムパスを変更するだけで済みます。
はじめに
Windows 標準ツール「タスクスケジューラ」は、決まったタイミングで処理を実行させるなど、便利な自動化ツールです。しかしこのツール、詳細な動作定義ができる反面、初めてだと使い方がよく分からずハマりやすい部分が多いと思うのです。システムエンジニアをやっていた私も、当時よくハマっていました。
このツールの使い方を詳しく解説するWeb記事はたくさんあって、とても参考になります。ですが他方で、最低限の要件さえ実現できれば良く、ツールについて調べる時間を省きたい人も多いのではないでしょうか。
そこで、インポートと最小限の変更だけで使えるサンプルを用意しました。使い方は、下のリンクからファイルをダウンロードし、以降の説明を参考にインポートし、必要な設定を修正すればOKです。
サンプルタスクのダウンロード
下記の条件で、決まった日時にバッチファイルを実行します。インポート用ファイルは以下からダウンロードできます(要ZIP解凍)。
タスクのインポート方法
タスクのインポート
まず、タスクスケジューラを起動します(起動方法)。
タスクスケジューラの画面で、右側の操作ウィンドウで「タスクのインポート」をクリックします。(もしくは、メニューの[操作]>[タスクのインポート]でもOK)
ダイアログで、上でダウンロードしたXMLファイルを指定します。(ダウンロードしたZIPファイルは解凍してお使い下さい)
下の画面で、赤枠部分にタスクの名前を分かりやすいように設定します(そのままでもいいですが、名前だけは何故か後で変更できません)。ここで実行日時などを修正してもいいですが、次項で改めて解説しますので、とりあえず「OK」ボタンを押します。
下のように「タスクスケジューラ ライブラリ」という位置に、下のように新しいタスクが追加されれば、タスクのインポートは完了です。なお、タスクが表示されていない場合、メニューの[操作]>[最新の情報に更新]などで、表示を更新して下さい。
設定の変更方法
インポートしたタスクの実行日時やプログラムを変更するには、タスクスケジューラの「タスクスケジューラライブラリ」に追加されているタスク(表示されていない場合、前述のとおり画面表示を更新)を右クリックして「プロパティ」を選択します。
以下、変更したい内容ごとに操作方法を紹介します。
実行するバッチ・プログラムを変更する(必須)
実行するバッチやプログラムを変更するには、[操作]タブを表示します。下のように、サンプルの実行プログラムが設定されているので、これをダブルクリックして変更します。※サンプルにバッチ本体は含まれていないため、そのままタスクを実行しても失敗します。
編集画面が開きます。下のように、赤枠部分に実行させたいバッチやプログラムのパスを設定します。「開始(オプション)」は空でも設定できますが、実行するバッチ等があるフォルダのパスを指定しておくことを推奨します(後述)。
実行タイミングを変更する
実行する日付や曜日を変更するには、[トリガー]タブを表示します。下のように、サンプルの実行タイミングが設定されているので、変更する場合はこれをダブルクリックします。
詳細設定画面が開きます。下の例は、毎週○曜日の△時に実行するものですが、最低限赤枠の部分を変更すればOKです。毎日実行させたい場合、日~土曜日すべてにチェックします(あるいは区分を「毎日」に変更)。
他の例として、毎月第1月曜日の10:00に実行する場合は、下のようになります。
「管理者として実行」させる
実行するバッチやプログラムによっては、実行する際に右クリックで「管理者として実行」を選ばないと正しく動作しないものがあります。その場合は、下図のように[全般]タブで「最上位の特権で実行する」のチェックをONにします。
セキュリティのことを全く考えなくてよければ、全てONにしておく方が楽ですが、それはお勧めできません。基本はOFFとして、それで正常に動作できない場合のみONにするが良いでしょう。
ログオフ状態でも実行する(別ユーザーで実行)
Windowsにログオン(サインイン)していない状態でも実行したい場合は、下図の設定が必要です。サーバーとして使用するWindows Serverではこちらの方が一般的でしょう。
設定するには[全般]タブで下図のように操作し、タスクを実行したいユーザーを指定します。最後に「OK」を押したときに、指定ユーザーのパスワードが求められますので、正しく入力します。
テスト実行
タスクが正しく実行されるかを確認するには、下のようにタスクを右クリックして「実行する」を選び、テスト実行してみます。バッチプログラムなどの結果が、期待した通りかを確認します。
参考:タスクスケジューラ関連記事
そのほか、タスクスケジューラの使用例や、起こりがちなトラブルの対処方法、その他知っておくと便利なことなどを以下の記事にまとめています。併せてご覧下さい。
おわりに
今回の記事は以上です。
当サイトでは、ITインフラ関連の知識やノウハウをメインに紹介しています。下の関連記事にも役立つ情報があるかもしれませんので、ぜひご覧下さい。
また、知識やノウハウを効率的に学ぶ方法として、Udemy の「ながらセミナー」もおすすめです。三日坊主にならず、普段の生活の中でスキルアップする方法です。これについては下の記事で紹介していますので、良ければご覧下さい。
最後まで読んでいただき、ありがとうございました。
フィードバック
あなたが抱えている疑問や悩みは解決できたでしょうか?当ブログではそれを最重視しています。今後もあなたの役に立つ情報を提供するために、ぜひ教えて下さい。
コメント
タスクスケジューラで、特定プログラム実行中にバッチを起動する方法を教えて下さい。
Zoom 会議中にブラウザで内職させないようにしたいのです。
ブラウザを強制終了するバッチを、タスクスケジューラで 5分毎に実行させることはできました。
このタスクを、Zoom 実行中だけに有効にしたいのです。
トリガーのイベント時を使えばよいのかと思いますが、よくわかりません。
お分かりでしたら教えて下さい。
内職防止・・・難しい課題ですね。タスクスケジューラの機能だけで実現するのは厳しいかもしれません。
一応、会議開始時にWindows イベントビューアにログが記録されるのであれば、それをタスクスケジューラのトリガーにしてタスクを開始できそうです。しかし、調べた限りでは、そういったログは記録されないようです。
一時期Zoomに「アテンション・トラッキング」という内職防止機能があったそうですが、プライバシーの観点から削除されたようです。他のリモート会議ソフトでも、この機能は実装しない方針のようです。
一つの案として、もし「SKYSEA ClientView」のようなPC管理システムを導入している場合、「会議時間中にブラウザがアクティブ状態だった(内職していた可能性がある)」という記録を取ることができます。これを会議参加者に伝えて、「後で調べればバレるから内職しないように」と注意するのが現実的かもしれません。あまりお力になれず恐縮です。
早速検討していただき感謝いたします。
バッチ側で検索条件を入れ子にしたところ、取りあえず目的を達成することができました。
有難うございます。
今後ともよろしくお願いいたします。
**********************
rem Zoom時ブラウザ終了
@echo off
rem 画面表示を最小限に
@if not “%~0″==”%~dp0.\%~nx0″ start /min cmd /c,”%~dp0.\%~nx0” %* & goto :eof
rem コマンド画面(バッチファイル)を非表示
rem https://nllllll.com/windows/windows-bat-minimize/
rem Windowsで特定のプログラムを自動停止
rem https://qiita.com/hadacchi/items/749bcdabe44d8c5c8532
rem Windows:バッチファイルの書き方忘れそうだから備忘録を書くよ
rem https://at.sachi-web.com/blog-entry-1385.html
tasklist | find /I “Zoom.exe” > nul
if not a%errorlevel%==a1 (
tasklist | find /I “msedge.exe” > nul
if not a%errorlevel%==a1 (
taskkill /IM msedge.exe /F
)
)
rem 「/im」は、イメージ名を指定するオプション
rem 強制終了させる場合は、「/f」オプション
rem /T 親プロセスと共にすべての子プロセスも終了
tasklist | find /I “Zoom.exe” > nul
if not a%errorlevel%==a1 (
tasklist | find /I “chrome.exe” > nul
if not a%errorlevel%==a1 (
taskkill /IM chrome.exe /F
)
)
rem taskkill /IM chrome.exe /T /F 2>NUL
rem pause
**********************