- blogs:
- cles::blog
タスクスケジューラに登録されているタスクに外部から引数を与える
windows systemmanagemant tutorialタスクスケジューラーに登録されているタスクは schtasks を使うとコマンドラインから実行することができますが、このときに外部から引数を渡すことができないかと思っていろいろと調べてみました。
まず、Schtasks.exe のリファレンスを読んでみたのですが、タスクの起動 ( Run ) の時に引数を渡せるような記述は残念ながらありませんでした。
じゃあ、もう少し低レベルな呼び出しならどうだろうかということで、リファレンスをあたってみたところ、以下のような記述があるのを発見。action properties で $(Arg0) と書くという意味が分らずにちょっとハマりましたが、なんとか動かせるようになりました。
RegisteredTask.Run method (Windows)
The string values that you specify are paired with names and stored as name-value pairs. If you specify a single string value, then Arg0 will be the name assigned to the value. The value can be used in the task action where the $(Arg0) variable is used in the action properties.
以下、構築例。
† タスクを作るときの一手間
まず、起動するタスクを作ります。フォルダと名前は後で呼出し時に必要になるので、覚えておいてください。
タスクを定期実行する必要がなければ、トリガーは全て削除しておきます。
ちなみにここで「最上位の特権で実行する」にチェックをつけておくと、UAC を回避することができます。
タスクに引数を渡すためには操作で起動するアプリやバッチを設定するときに、引数の追加(オプション)に $(Arg0) $(Arg1) $(Arg2) ・・・というようなプレースホルダを入れる必要があります。実行時に $(Arg#) の部分が実際に渡した引数に置き換わりますので、これを入れないと引数がきちんと渡されないので注意が必要です。
また、ノート PC の場合には条件タブで「コンピュータを AC 電源で使用している場合のみタスクを開始する」のチェックを外しておかないと、バッテリ駆動時にタスクが起動されないので注意が必要です。
† タスクを呼出すスクリプトを書く
今回は Windows の API にアクセスする必要があるので VBS を使います。
具体的には以下のような感じになります。フォルダの名前(foo)、タスクの名前(bar)、引数(baz) の部分については適宜変更してください。もちろんこれらに変数を使うこともできます。
taskinvoke.vbs
あとはこのスクリプトを起動すると、タスクスケジューラーに登録されているタスクが実行時の任意の引数で起動できます。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/8989
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
- シャープの空気清浄加湿器の... (1)
- SMARTEK デジタル温湿度計 (1)
2 . Word で数式がグレーアウトされていて挿入できないときは(15317)
3 . awk で指定した n カラム目以降を出力する(11814)
4 . アーロンチェアのポスチャーフィットを修理(11645)
5 . Windows 10 で勝手にログアウトされないようにする(9817)