Programming Field

Schtasks /Create - DOS/コマンドプロンプト コマンド一覧

スケジュールタスクの登録を行います。Schtasksのコマンド(オプション)の1つです。

構文

schtasks[.exe] /Create [/S <remote-system> [/U <user-name> [/P [<password>]]]]
    /TN <task-name> /TR <command>
    /SC <schedule> [/MO <parameter>] [/EC <channel>]
    [/D <day>] [/M <month>] [/I <idle-time>] [/ST <start-time>]
    [/RI <interval>] [{/ET <end-time> | /DU <duration>} [/K]]
    [/SD <start-date>] [/ED <end-date>] [/DELAY <delay-time>] [/IT | /NP]
    [/RU <user> [/RP <password>]] [/RL <level>]
    [/XML <xml-file>] [/V1] [/Z] [/F] [/HRESULT]

オプション一覧

/S <remote-system> タスクの登録先となるコンピューター(ローカル/リモート)の名前を指定します。IPアドレスやホスト名を指定します。省略した場合はローカルコンピューターが対象になります。
/U <user-name> [/P [<password>]]

コンピューター名を指定した際のログイン名・パスワードを指定します。<user-name> にはドメイン名を指定することができます(「ドメイン名\ユーザー名」の形式です)。省略した場合はこのコマンドを実行したユーザーが使用されます。

パスワード指定は、「/P [<password>]」全体を省略した場合はパスワードなし、「/P」のみ指定して「<password>」を省略した場合はプロンプトを表示してユーザーにパスワード入力を促すようになります(このプロンプトでは入力されたパスワードが「*」で表示されます)。

/TN <task-name>

タスク名を指定します。<task-name> にはファイル名で使用できる文字と「\」が使用できます(詳細は「タスク名について」を参照してください)。

※ スペース文字を含めたい場合は「" "」で括って指定する必要があります。

/TR <command>

実行するコマンドを指定します。<command> には実行可能ファイル名+パラメーターを指定します。

コマンドにパラメーターを指定する場合は、コマンドライン全体を「" "」で括る必要がありますが、コマンドラインに「"」を含めたい場合は「""」と書きます。

※ 「"」の解釈が若干特殊で、「""」と書いた場合は「コマンドラインに " を(その位置に)含める」+「" " の括りを始める/終える」という効果になります。例えば「hoge "piyo piyo"」というコマンドラインを渡す場合は「"hoge """piyo piyo""」と書く必要があります。

/SC <schedule>

タスクの実行タイミング(スケジュール)を指定します。<schedule> には以下の値を指定します。

意味
MINUTE 分単位での指定時間ごとにプログラムを実行します。/MO を指定しない場合は1分間隔で実行します。
HOURLY 時単位での指定時間ごとにプログラムを実行します。/MO を指定しない場合は1時間間隔で実行します。
DAILY 日ごとにプログラムを実行します。/MO を指定しない場合は1日間隔で実行します。
WEEKLY 週ごとにプログラムを実行します。/MO を指定しない場合は毎週1回実行します。/D を指定しない場合は月曜日に実行します。
MONTHLY 月ごとにプログラムを実行します。/MO を指定しない場合は毎月1回実行します。/M の指定が必須になります。また、「/MO LASTDAY」以外の場合は /D の指定も必須になります。
ONCE (特に指定のない場合)1回だけプログラムを実行します。ONCE を指定した場合は /ST の指定が必須になります。
ONSTART コンピューターの起動時にプログラムを実行します。このタスクの作成には管理者権限が必要です。/RU や /NP を指定しない場合は「ユーザーがログインしているときのみ実行する」の条件に当てはまらないため実行されません。
ONLOGON 任意のユーザーがコンピューターにログインした時にプログラムを実行します。このタスクの作成には管理者権限が必要です。/RU や /NP を指定しない場合は作成者ユーザーがログインしたタイミングでないと実行されません。
ONIDLE コンピューターがアイドル状態のときにプログラムを実行します。/I で実行するまでのアイドル時間を指定します。
ONEVENT [Windows Vista以降] イベント(イベントビューアーで確認できるもの)が発生したタイミングでプログラムを実行します。/MO でイベントを(XPath形式で)指定する必要があり、場合によっては /EC の指定も必要になることがあります。
/MO <parameter>

スケジュールの種類(/SC で指定したもの)に応じたパラメーターを指定します。具体的には以下の内容を指定します。

/SC の種類 指定するパラメーター
MINUTE 何分間隔でタスクを実行するかの時間(分単位)を 1 から 1439 の間で指定します。
HOURLY 何時間間隔でタスクを実行するかの時間(時単位)を 1 から 23 の間で指定します。
DAILY 何日ごとにタスクを実行するかの日数を 1 から 365 の間で指定します。
WEEKLY 何週ごとにタスクを実行するかの週数を 1 から 52 の間で指定します。
MONTHLY 対象の月の倍数を 1 から 12 の間で指定します(3 を指定した場合は3月・6月・9月・12月に実行されます)。また、以下の値も指定できます。
FIRST 毎月最初の指定曜日に実行します。/D で曜日を指定する必要があります。
SECOND 毎月2番目の指定曜日に実行します。/D で曜日を指定する必要があります。
THIRD 毎月3番目の指定曜日に実行します。/D で曜日を指定する必要があります。
FOURTH 毎月4番目の指定曜日に実行します。/D で曜日を指定する必要があります。
LAST 毎月最後の指定曜日に実行します。/D で曜日を指定する必要があります。
LASTDAY 対象月の最終日に実行します。/M で対象の月を指定する必要があります。
ONCE /MO は使用できません。
ONSTART /MO は使用できません。
ONLOGON /MO は使用できません。
ONIDLE /MO は使用できません。
ONEVENT XPath形式の文字列を指定します。(例: 「*[System[Provider[@Name='Microsoft-Windows-Winlogon'] and EventID=7001]]」)
/EC <channel> [Windows Vista以降] 「/SC ONEVENT」のスケジュールを登録する際のイベントのチャネル名(「System」や「Applications」、「Windows PowerShell」などの名前; イベントビューアーにおけるプロパティで表示されるフルネーム)を指定します。
/D <day> タスクの実行タイミングとなる日または曜日を指定します。<day>には、「/SC WEEKLY」または「/SC MONTHLY かつ /MO が FIRST, SECOND, THIRD, FOURTH, LAST」の場合は曜日を英語3文字(SUN, MON, TUE, WED, THU, FRI, SAT)で、「/SC MONTHLY かつ /MO が前述以外」の場合は何日に実行するかを指定します。「/SC WEEKLY」の場合のみスペースを設けずにコンマ区切りで複数の日を指定できます。
/M <month> タスクの実行タイミングとなる月を指定します。<month>には月を表す英語3文字(JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, *)を指定します。「*」を指定した場合は毎月実行します。「/SC MONTHLY かつ /MO が FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY」の場合にのみ指定できます(LASTDAY の場合は必須です)。スペースを設けずにコンマ区切りで複数の月を指定できます。
/I <idle-time> アイドル(待機)時間を分単位で指定します。「/SC ONIDLE」のとき、ここで指定した時間アイドル状態であった場合にタスクが実行されます。
/ST <start-time> タスクを開始する時刻を指定します。<start-time> に「hh:mm」(時2桁+「:」+分2桁)の形式で24時間形式で指定します。省略した場合は現在(コマンドを実行したタイミング)の時刻が使用されます。/SC ONCE の場合は /ST の指定が必須になります。/SC が ONSTART, ONLOGON, ONIDLE, ONEVENT の場合には指定できません。
/RI <interval>

タスクを繰り返し実行する際の間隔を分単位で指定します。/SC が DAILY, WEEKLY, MONTHLY, ONCE の場合にのみ指定できます(ONCE 以外の場合は、それぞれのスケジュールごとにさらに繰り返され、例えば MONTHLY の場合は毎月トリガーされた後、そこから /RI での間隔でさらに繰り返されます)。/ET または /DU で計算される時刻まで繰り返し実行されます。/SC が ONSTART, ONLOGON, ONIDLE, ONEVENT の場合には指定できません。

/ET または /DU が指定されて /RI が省略された場合、タスクは10分間隔で実行されます。

/ET <end-time> タスクを終了する時刻(有効期限)を指定します。<end-time> に「hh:mm」(時2桁+「:」+分2桁)の形式で24時間形式で指定します。終了時刻は /ST から数えて繰り返し実行を1回行った時刻よりも大きい時刻である必要があります(例: /ST 16:25 /RI 1 の場合は /ET は 16:27 以降である必要があります)。/SC が ONSTART, ONLOGON, ONIDLE, ONEVENT の場合には指定できません。
/DU <duration> タスクを何分間繰り返すかの時間を分単位で指定します。この値は /RI (未指定の場合は 10) より大きい値である必要があります。/SC が ONSTART, ONLOGON, ONIDLE, ONEVENT の場合には指定できません。
/K /ET または /DU で計算される終了時刻に到達した際、タスクがまだ実行中であれば終了シグナルを送ります。この場合、タスクの実行記録には強制終了された旨が残ります。/SC が ONSTART, ONLOGON, ONIDLE, ONEVENT の場合には指定できません。
/SD <start-date> タスクを開始する日付を指定します。<start-date> にはシステム設定に基づいた日付を年から指定します(通常の日本語環境であれば「yyyy/mm/dd」形式)。省略した場合は現在の日付が使用されます。/SC が ONSTART, ONLOGON, ONIDLE, ONEVENT の場合には指定できません。
/ED <end-date> 繰り返し実行するタスクの終了日(有効期限)を指定します。<end-date> にはシステム設定に基づいた日付を年から指定します(通常の日本語環境であれば「yyyy/mm/dd」形式)。/SC が ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT の場合には指定できません。
/DELAY <delay-time> [Windows Vista以降] /SC が ONSTART, ONLOGON, ONEVENT のときトリガーされてから実際にコマンドを実行するまでの遅延時間を指定します。<delay-time> には遅延時間を「mmmm:ss」形式で指定します(例: 2秒なら 0000:02 と指定します)。
/IT

/RU で指定したユーザー(未指定の場合はコマンド実行時のユーザー)がログインしている場合のみタスクを実行します。既定では /IT が指定されたものと同じ状態でタスクが作成されますが、/XML オプションでタスクデータを読み込んだ場合、このオプションを指定することで /XML で指定されたファイルの内容を上書きすることができます。

なお、/RU で SYSTEM を指定している場合は /IT は無視されます。

/NP

/RU で指定したユーザー(未指定の場合はコマンド実行時のユーザー)がログインしていなくてもタスクを実行します。このとき、ユーザーに対するパスワードは保存されません。ローカルのタスクを作成する場合にのみ指定できます。Schtasksコマンドを実行したユーザー以外を /RU で指定した場合は /NP を使うとアクセスが拒否される場合があります。また、/NP で実行した場合は原則バックグラウンドタスクとして実行されるため、ユーザーインターフェイスを表示するプログラムは意図しない挙動になる可能性があります。

なお、/RU で SYSTEM を指定している場合は /NP は無視されます。

/RU <user> タスクを実行する際のユーザーを指定します。ビルトインユーザーの「SYSTEM」なども使用できます。/NP が指定されていない場合はこのユーザーがログインしている場合にのみタスクが実行されます。
/RP [<password>] /RU で指定したユーザーのパスワードを指定します。<password> を省略した場合(/RP のみ指定した場合)はパスワードが尋ねられます。
/RL <level> [Windows Vista以降] タスクを実行する際のレベルを指定します。<level> には LIMITED (通常) か HIGHEST (最上位の特権) のいずれかを指定します。
/XML <xml-file>

[Windows Vista以降] 登録したいタスクの情報が書かれたXMLファイルを指定します。「Task Scheduler Schema」に従って記述されたXMLファイルを指定する必要があります。XMLファイルを使うことで、Schtasksのオプションでは指定できない項目/設定をタスクに適用することができます。/XML を用いてタスクを作成した場合、/TN 以外のオプションは省略可能になります。

※ XMLファイルにはタスク名を記述する要素が存在しないため、/XML を指定した場合でも /TN は必須オプションになります。

/V1 [Windows Vista以降] Windows Vistaより前のバージョンと互換のあるタスク(バージョン 1.1)を作成します。一部オプションが使用できなくなります。
/Z

タスクが実行された後これ以上実行されない場合、タスクを削除します。(実際には1秒後に削除されます。)

※ /Z を指定した場合、/DU は使用できず、/ET を指定する必要があります。(/DU を指定した場合「タスク XML に必須の要素または属性が含まれていません。(45,4):EndBoundary:」というエラーが発生します。)

/F タスクが既に存在する場合も強制的に上書きして作成します。
/HRESULT [Windows 10?以降] Schtasksコマンドの終了コードを HRESULT にします。エラー発生時に詳細なハンドリングを行いたい場合に使用します。

解説

Schtasksの「/Create」を用いるとタスクを登録することができます。タスクを登録することで、スタートアップ時に起動したいプログラムや、定期的に実行したいプログラムを登録することができます(Linux系におけるcronのような役割があります)。ただし「ONLOGON」など、一部のタスク種別の作成には管理者権限が必要ですので注意してください。

※ 「特定のユーザーがログインしたタイミングでのタスク実行」の登録は、Schtasksコマンドのパラメーターでは指定できません。事前にXMLファイルを作成して /XML パラメーターで指定する必要があります。(「特定のユーザーがログインしたタイミングでの実行」の設定を記述したXMLファイルを作成して登録すれば、管理者権限が無くても登録できます。)

Schtasksで作成するタスクは、XMLファイルで設定されている場合を除き「電源に接続されている場合のみ実行」となります。ノートPCなどで電源に接続していない場合は実行されませんのでご注意ください。

なお、指定日・指定時刻に実行するタスクは、そのタイミングでシステムが起動されていない場合実行されません。

タスクは %windir%\System32\Tasks 以下にファイルとして作成されます。このファイルはXML形式であり、Schtasksの「/XML」パラメーターで指定することができます。また、あらかじめ作成しておくことでプログラムのインストール処理の一環でXMLファイルをベースにスケジュールを登録することができます。

サンプル1

schtasks /create /tn CheckUpdate /tr D:\home\updater.exe /sc daily /st 17:00

「D:\home\updater.exe」を毎日17:00に実行するタスク「CheckUpdate」を登録します。ユーザーオプションを指定していないため、現在のユーザーがログインしている場合にのみ、現在のユーザーの権限で実行します。

サンプル2

schtasks /create /tn CheckStatus /tr D:\home\checker.exe /sc monthly /mo first /m jan,mar,may,jul,sep,nov /d mon /st 10:00 /ru system

「D:\home\checker.exe」を1月・3月・5月・7月・9月・11月の第1月曜日10:00に実行するタスク「CheckStatus」を登録します。タスクは「SYSTEM」アカウントで実行されます。

サンプル3 (コマンドプロンプト)

for /f "tokens=2 delims=:" %A in ('whoami /user /fo csv /nh') do set "MY_SID=%~A"
schtasks /create /tn LaunchNotepad /tr notepad.exe /sc onevent /ec system ^
  /mo "*[System[EventID=7001] and EventData[Data[@Name='UserSid']='%MY_SID%']]" ^
  /delay 3

「notepad.exe」を現在のユーザーがログインしたときに実行するタスク「LaunchNotepad」を登録します。1行目は、現在のユーザーのSIDを取得するためにWhoamiコマンドを実行し、Forによって「MY_SID」変数にその結果を代入しています。XPath「*[System[EventID=7001] and EventData[Data[@Name='UserSid']='%MY_SID%']]」は「Windowsログオンイベント(EventID: 7001)かつそのユーザーが %MY_SID%」である場合にのみ一致させる、という意味を持ちます。また、プログラムがうまく実行されるように遅延時間(3秒)を指定しています(3秒では足りない可能性はあります)。

なお、指定ユーザーのログオン時にタスクを実行したい場合は、タスクスケジューラでGUIから設定するか、以下のようなXMLファイルを作ってSchtasksに読み込ませる方がベターです。

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <Triggers>
    <LogonTrigger>
      <Enabled>true</Enabled>
      <UserId>ここにユーザー名を指定</UserId>
    </LogonTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <RunLevel>LeastPrivilege</RunLevel>
      <UserId>ここにユーザー名を指定</UserId>
      <LogonType>InteractiveToken</LogonType>
    </Principal>
  </Principals>
  <Actions Context="Author">
    <Exec>
      <Command>ここに実行したいコマンドを入力</Command>
    </Exec>
  </Actions>
</Task>

上記を Bar.xml として保存した場合(※ 必ずBOM付き UTF-16 LE で保存します)は、「schtasks /create /tn タスク名 /xml Bar.xml」で登録できます。

関連項目