treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

コマンドからタスクスケジューラのタスクを作成してみる

前々から一回やってみようと思っていたのですが必要に迫られてなかったことと、時間が取れなかったのでやってなかったのですが、コマンドプロンプトからタスクスケジューラでタスク作成をやってみたのでご報告です。

これに慣れてくるとバッチファイル実行とタスクスケジューラを組み合わせて、実行の幅が広がるような気がします。

タスクスケジューラをコマンドから操作する

バッチファイルを一度実行するだけで、それ以降は定期実行ができるようになれば便利、そう思ってタスクスケジューラをコマンドプロンプトから操作する方法を実施してみることにしました。
コマンドは「schtasks」コマンドを使用します。
※ちなみにタスクスケジューラ画面を表示させるコマンドは「taskschd.msc」です。手動でGUIから操作したい場合には「taskschd.msc」を使います。今回はコマンドプロンプト内でタスクの生成や編集までを完結させます。

タスクスケジューラ登録対象

タスクスケジューラの登録対象として、以前作成したアプリケーションの自動更新を実行するAutoUpd.vbsをサンプルにすることにしました。

blog.treedown.net

ここでも実施していますが、手動でタスクスケジューラに登録しているので、これをバッチファイルに組み込みできれば有用かなと考えたものです。※どんな機能があるVBSかは上述のリンクを参考

今回の環境では。

f:id:treedown:20220221115209p:plain
ここにファイル一式を保管しています。

まず、タスクを作成してみる

最初はテンプレとなる.xmlファイルをタスクスケジューラから生成して、別のPCではそれをインポートする方法を考えていました。ただ、

f:id:treedown:20220221115241p:plain
このようにエラーとなってしまい、なんか上手くいかない。インポートしたとしても、タスクのプロパティで表示されるユーザ名などの認証情報は入力し直さなきゃいけないということもあり最初から作成していく方向に切り替えて動作確認を進めていきました。

コマンドの詳細なオプションは、

schtasks /?
schtasks /create /?
schtasks /Change /?

で画面に表示することが可能です。この辺をしっかり読んで理解しておくようにします。

まず、基本の形は、

SCHTASKS /Create /RU %USERNAME% /TN %タスク名% /TR "タスクで実行するファイルなど" /SC %実行タイミング%

で、単純なタスクの作成は実行可能です。
※「/SC」オプションの実行タイミングはコマンドのヘルプ(/?)に記載の「スケジュールの各種類に利用できる値:」にて確認できます。今回はログイン時の実行なので「ONLOGON」の指定となりました。

タスクスケジューラの操作には管理者で実行されたコマンドプロンプトが要求されますので、まずこれを実行してみました。

f:id:treedown:20220221115301p:plain
コマンド実行は成功、さっそくタスクを確認してみると、

f:id:treedown:20220221115318p:plain
なるほど、「最上位の特権で実行する」のオプションが必要なタスクなので付け足したい、他にも別画面のトリガーの詳細設定にある

f:id:treedown:20220221115336p:plain
この「遅延時間を指定する」オプションも追加したいと思います。

検証、確認

タスクを作って消して、を繰り返すよりも、いったん作成したタスクを編集して、最終的に必要なオプション全部入りのコマンドを完成させたほうが手間が少なく済みます。
そこで使うのが、「schtasks /Change」です。これで、既存のタスクの一部を修正することができます。

調べたところ、「最上位の特権で実行する」チェックボックスの有効化は「/RL HIGHEST」オプションのようでした。さっそく「schtasks /Change」コマンドで確認してみます。

f:id:treedown:20220221115401p:plain
正常に実行が完了しました。タスクのプロパティを確認すると、

f:id:treedown:20220221115416p:plain

チェックボックスの有効化ができました。

これと同じように、遅延時間を指定するオプションも指定してみます。
遅延時間の指定は、「/DELAY」オプションを使うようです。時間指定の書式は「mmmm:ss」形式でないとエラーになりました。mが分でsが秒、分は四桁指定となるようです。なので5分を指定する場合「5:00」でなく「0005:00」と指定します。

f:id:treedown:20220221115433p:plain
これで指定した5分間の遅延時間の指定がタスクに登録されました。タスクのプロパティからトリガーのタブを開いて「トリガーの編集」画面を開いて確認したところ、

f:id:treedown:20220221115447p:plain

このように、タスクの設定ができていました。

あと、表示が変わらなかったので画面はキャプチャしていないのですが、「/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

管理者として実行したコマンドプロンプトでタスク作成を実行してみます。

f:id:treedown:20220221115522p:plain
エラーもなく完了。

試しにWindowsにサインインし直してみると、上手く動作することが確認できました。