前々から一回やってみようと思っていたのですが必要に迫られてなかったことと、時間が取れなかったのでやってなかったのですが、コマンドプロンプトからタスクスケジューラでタスク作成をやってみたのでご報告です。
これに慣れてくるとバッチファイル実行とタスクスケジューラを組み合わせて、実行の幅が広がるような気がします。
タスクスケジューラをコマンドから操作する
バッチファイルを一度実行するだけで、それ以降は定期実行ができるようになれば便利、そう思ってタスクスケジューラをコマンドプロンプトから操作する方法を実施してみることにしました。
コマンドは「schtasks」コマンドを使用します。
※ちなみにタスクスケジューラ画面を表示させるコマンドは「taskschd.msc」です。手動でGUIから操作したい場合には「taskschd.msc」を使います。今回はコマンドプロンプト内でタスクの生成や編集までを完結させます。
タスクスケジューラ登録対象
タスクスケジューラの登録対象として、以前作成したアプリケーションの自動更新を実行するAutoUpd.vbsをサンプルにすることにしました。
ここでも実施していますが、手動でタスクスケジューラに登録しているので、これをバッチファイルに組み込みできれば有用かなと考えたものです。※どんな機能があるVBSかは上述のリンクを参考
今回の環境では。
ここにファイル一式を保管しています。
まず、タスクを作成してみる
最初はテンプレとなる.xmlファイルをタスクスケジューラから生成して、別のPCではそれをインポートする方法を考えていました。ただ、
このようにエラーとなってしまい、なんか上手くいかない。インポートしたとしても、タスクのプロパティで表示されるユーザ名などの認証情報は入力し直さなきゃいけないということもあり最初から作成していく方向に切り替えて動作確認を進めていきました。
コマンドの詳細なオプションは、
schtasks /?
schtasks /create /?
schtasks /Change /?
で画面に表示することが可能です。この辺をしっかり読んで理解しておくようにします。
まず、基本の形は、
SCHTASKS /Create /RU %USERNAME% /TN %タスク名% /TR "タスクで実行するファイルなど" /SC %実行タイミング%
で、単純なタスクの作成は実行可能です。
※「/SC」オプションの実行タイミングはコマンドのヘルプ(/?)に記載の「スケジュールの各種類に利用できる値:」にて確認できます。今回はログイン時の実行なので「ONLOGON」の指定となりました。
タスクスケジューラの操作には管理者で実行されたコマンドプロンプトが要求されますので、まずこれを実行してみました。
コマンド実行は成功、さっそくタスクを確認してみると、
なるほど、「最上位の特権で実行する」のオプションが必要なタスクなので付け足したい、他にも別画面のトリガーの詳細設定にある
この「遅延時間を指定する」オプションも追加したいと思います。
検証、確認
タスクを作って消して、を繰り返すよりも、いったん作成したタスクを編集して、最終的に必要なオプション全部入りのコマンドを完成させたほうが手間が少なく済みます。
そこで使うのが、「schtasks /Change」です。これで、既存のタスクの一部を修正することができます。
調べたところ、「最上位の特権で実行する」チェックボックスの有効化は「/RL HIGHEST」オプションのようでした。さっそく「schtasks /Change」コマンドで確認してみます。
正常に実行が完了しました。タスクのプロパティを確認すると、
チェックボックスの有効化ができました。
これと同じように、遅延時間を指定するオプションも指定してみます。
遅延時間の指定は、「/DELAY」オプションを使うようです。時間指定の書式は「mmmm:ss」形式でないとエラーになりました。mが分でsが秒、分は四桁指定となるようです。なので5分を指定する場合「5:00」でなく「0005:00」と指定します。
これで指定した5分間の遅延時間の指定がタスクに登録されました。タスクのプロパティからトリガーのタブを開いて「トリガーの編集」画面を開いて確認したところ、
このように、タスクの設定ができていました。
あと、表示が変わらなかったので画面はキャプチャしていないのですが、「/IT」オプションを追加します。以下ヘルプからの抜粋。
--------------------------------------------------------------
/IT :
ジョブの実行時に /RU ユーザーが現在ログオンしている場合にのみ、タスクが対話的に実行されるようにします。このタスクは、ユーザーがログインしている場合にのみ実行します。
--------------------------------------------------------------
タスク実行のトリガとなるログインユーザを/RUで指定しているユーザに合わせています。
タスクスケジューラ登録コマンド
結果的に完成したコマンドラインが以下です。
SCHTASKS /Create /RU %USERNAME% /TN AutoUpdate連続実行 /TR "C:\Users\Public\UserPrograms\AutoUpdate\_AutoUpd.vbs" /SC ONLOGON /IT /RL HIGHEST /DELAY 0005:00
管理者として実行したコマンドプロンプトでタスク作成を実行してみます。
エラーもなく完了。
試しにWindowsにサインインし直してみると、上手く動作することが確認できました。