![見出し画像](https://assets.st-note.com/production/uploads/images/59451922/rectangle_large_type_2_93c9250dc9c62b66cb521d1c4b75b2d8.png?width=1200)
バッチファイルでタスクスケジューラにタスクを追加する
以前作ったものをタスクに登録するバッチを調べてみる。
Microsoft Docsの以下を参照して作っていく。
まずは普通に
毎週火曜日10時にTaskTestという名前でTaskTest.vbsを実行させる。
schtasks /create /tn "TaskTest" /tr c:\temp\TaskTest\TaskTest.vbs /sc weekly /d TUE /st 10:00
オプションは以下
/create:追加
/tn:タスク名
/tr:実行するプログラム
/sc:実行周期
/d:実行日
/st:実行時間
このコマンドは管理者権限でなくてもいけた。
これでできたものが以下
![画像1](https://assets.st-note.com/production/uploads/images/59448797/picture_pc_3a693e9b41475ade9a16cee0fd15a725.png?width=1200)
![画像2](https://assets.st-note.com/production/uploads/images/59448808/picture_pc_e8338f9d850d0b359187771556115685.png?width=1200)
![画像3](https://assets.st-note.com/production/uploads/images/59448820/picture_pc_41ce260727d90e1746b653288682f2f2.png)
実行時にユーザに依存しないように改変
次に以下の条件を追加
・ユーザーアカウントをどのPCにも存在するSYSTEMで実行
・「ユーザーがログオンしているかどうかにかかわらず実行する」
・「最上位の特権で実行する」
・同じ名前のタスクがあったら上書きする
上記の条件を満たして、ユーザがログオンしていなくてもPCの電源が入っている限り管理者権限で定期的に実行させるように仕組む
schtasks /create /tn "TaskTest" /tr c:\temp\TaskTest\TaskTest.vbs /sc weekly /d TUE /st 10:00 /ru system /rl highest /F
こちらは「最上位の特権で実行する」があるためか、管理者権限で実行しないと「拒否」された。
管理者権限でバッチを起動させるには以下を参照
オプションの意味合いは以下
/ru:ユーザ名指定。SYSTEMにすることで登録時にパスワード要求を回避
/rl highest:「最上位の特権で実行する」
/F:これをつけると同じタスク名を問答無用でと上書きしてくれる。
指定時に電源落ちてた場合の対策
定期実行させたいけど、たまたま電源が落ちていた場合は実行されない。動かしたい内容によるが、ずっとスルーされて困る内容であれば「スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する」をONにすることで、次回PC起動時に実行させるようにできる。
![画像4](https://assets.st-note.com/production/uploads/images/59451171/picture_pc_4ef2b0079842bc282dc970d6ae1d464a.png?width=1200)
こちらはバッチファイルではできなかったので、別の方法でやってみる。
XMLファイルで登録する
そもそもGUIで作ったタスクをエクスポートして、バッチと一緒に配ってインポートしてしまうこととした。
※PowerShellでも可能だが、今回のテーマはbatなので割愛。
GUIで完成させたタスクを右クリックし、エクスポート
![画像5](https://assets.st-note.com/production/uploads/images/59451785/picture_pc_1a5db16047fe4406e9fe0f99fa03e67d.png?width=1200)
XMLファイルがエクスポートされるので、それを以下のコマンドでインポートすることで解消される。
schtasks /Create/XML TaskTest.xml /tn "TaskTest" /F
今回は以上
その他バッチファイル記事は以下