BLOGTIMES
2016/12/06

タスクスケジューラに登録されているタスクに外部から引数を与える

  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

Set TaskService=CreateObject("Schedule.Service") TaskService.Connect Set TaskFolder=TaskService.GetFolder("\foo") Set RegisteredTask=TaskFolder.GetTask("bar") RegisteredTask.Run "baz"

あとはこのスクリプトを起動すると、タスクスケジューラーに登録されているタスクが実行時の任意の引数で起動できます。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/8989
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン