treedown’s Report

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

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

(1/2)タスクスケジューラのコマンドオプションを調べてみる

以前実施した<コマンドからタスクスケジューラのタスクを作成してみる - treedown’s Report>この記事では、タスクスケジューラをコマンドから登録して検証してみましたのでご報告です。

今回、もう一回タスクスケジューラをコマンドから設定する必要があったため、今後のためにタスクスケジューラのGUI画面とSCHTASKSコマンドオプションを対照するように記事を作成してみようと考えました。

ただ、自分が使ったところだけ、ですが。

基本の形と前提条件

今回は、以下の条件でSCHTASKSコマンドを使ったテスト用のタスクジョブ作成を前提としてコマンドを生成しています。

タスク名:Test-Task-1
タスクから実行するのは「"C:\temp\test\test.bat"」の実行
実行ユーザはログイン中のユーザ=「%USERNAME%」固定

これらは、実際に使う時に適宜その都度の環境で読み替えるようにします。

ベースとなるコマンドラインは

タスク作成は

SCHTASKS /Create /RU %USERNAME% /TN Test-Task-1 /TR "C:\temp\test\test.bat"

タスク修正は

schtasks /Change /RU %USERNAME% /TN Test-Task-1 /TR "C:\temp\test\test.bat"

となります。「SCHTASKS /Create」専用のオプションを操作する場合と「schtasks /Change」で動作する時のオプションは指定が異なったり違う動作となったりすることがあるので確認が必要です。

オプションが微妙に違うので、今回は「SCHTASKS /Create」中心です。
また、コマンドの実行はすべて「管理者:コマンドプロンプト」で実行しています。

最低限必要となるオプション

最低限タスクを作成するために、前述のコマンドラインに「/SC」オプションを付加する必要があります。これはタスクがどのタイミングで実行されるかを指定するオプションで必須のオプションになります。
日付や時間指定の場合には「MINUTE/HOURLY/DAILY/WEEKLY/MONTHLY」を使ってスケジュールの頻度を指定します。
一回だけの実行を指定する場合には、「ONCE」を指定します。
PC起動時にプログラムの実行を指定する場合には「ONSTART」
ユーザのログオン(サインイン)時に実行するタスクを作る場合には「ONLOGON」
アイドル状態の時に実行する「ONIDLE」や、特定のイベント(eventvwr.msc)記録時にタスクを実行する「ONEVENT」もあります。

今回はユーザのログオン(サインイン)時に実行する「ONLOGON」を指定するようにします。つまり、

SCHTASKS /Create /RU %USERNAME% /TN Test-Task-1 /TR "C:\temp\test\test.bat" /SC ONLOGON

となります。

タスク「全般」⇒セキュリティオプション

まずは「SCHTASKS /Create」専用のオプションとなる指定です。

全般タブのセキュリティオプション画面上、「ユーザがログオンしているときのみ実行する」か「ユーザがログオンしているかどうかにかかわらず実行する」の選択肢をオプションで指定してみます。

特に指定せずに

SCHTASKS /Create /RU %USERNAME% /TN Test-Task-1 /TR "C:\temp\test\test.bat" /SC ONLOGON

と実行した場合、

このように「ユーザがログオンしているときのみ実行する」が選択された状態でタスクが作成されます。これがデフォルトです。

これを「ユーザがログオンしているかどうかにかかわらず実行する」が選択されたタスク(つまりバックグラウンドでのプロセスで実行するタスクを作成したい場合)とするには、「/NP」オプションを付けて

SCHTASKS /Create /RU %USERNAME% /TN Test-Task-1 /TR "C:\temp\test\test.bat" /SC ONLOGON /NP

と実行します。

このようにタスクが作成されます。ただしバックグラウンドでのプロセスで実行されるタスクは一切操作ができなくなるので、きちんと正常終了が保証されたバッチファイルであることが重要になります。

注意点:この「/NP」オプションを使って「ユーザがログオンしているかどうかにかかわらず実行する」を選択するには「SCHTASKS /Create」でタスクを作成するしかなく、「schtasks /Change」での編集で「/NP」オプションが指定できません。

 

このタスクに「最上位の特権で実行する」オプションを有効化するには、

SCHTASKS /Create /RU %USERNAME% /TN Test-Task-1 /TR "C:\temp\test\test.bat" /SC ONLOGON /NP /RL HIGHEST

と「/RL HIGHEST」を追加することで

このように「最上位の特権で実行する」オプションが有効化されます。これは「SCHTASKS /Create」と「schtasks /Change」の両方で実行可能です。

次回トリガ指定を

長くなってしまったので、続きは次の回に。

次回はタスク画面の「トリガ」タブ画面で指定するコマンドオプションを確認していきます。

blog.treedown.net