タスクスケジューラのタスクをコマンドで作成する方法

タスクスケジューラのタスクをコマンドで作成する方法

Windows環境で、タスクスケジューラを使って自動的にプログラムなどを実行したいとき、GUI画面でタスクを作成するのが一般的ですが、同じような設定のタスクをたくさん作成したい場合などでは、GUI画面で作成するよりもコマンドで作成したほうが効率的な場合があります。

そこでここでは、Windows 10でタスクスケジューラのタスクを、WindowsコマンドやPowerShellで作成する方法を紹介します。

Windowsコマンドで作成する

Windowsコマンドでタスクスケジューラを管理するときはschtasksコマンドを利用します。

タスクを作成するときは、コマンドプロンプトを起動してschtasksコマンドに「/create」オプションを使って行い、基本的な書式は次のとおりです。

管理者権限が必要な設定やプログラムを実行する場合は、管理者権限でコマンドプロンプトを起動してタスクを作成する必要があります。

> schtasks /create /tn <タスク名> /tr <実行するプログラム> <実行タイミング>

「タスク名」には、任意の管理しやすい名前を設定し、「実行するプログラム」には、タスクで実行したいプログラムやコマンドをフルパスで指定し、「実行タイミング」ではタスクを実行する日時や繰り返し間隔などを設定します。

たとえば「毎週金曜日の午後5時にシステム情報をファイルに保存する」というタスクを作成する場合は、以下のようにコマンドを実行します。

> schtasks /create /tn "TestReport" /tr "msinfo32.exe /report E:\msinfo.txt" /sc weekly /d fri /st 17:00

なお「実行タイミング」では、以下のようなオプションを使って実行タイミングを定義できます。

指定方法 説明
/sc once /st 21:30 21時30分に一度だけ実行
/sc once /sd 2022/9/14 /st 21:00 2019年12月31日の23時55 分に一度だけ実行
/sc onstart システム起動時に実行
/sc onstart /delay 5:00 システム起動の5分後に実行
/sc onlogon ユーザのログオン時に実行
/sc onidle /i 10 10分以上アイドル状態のときに実行
/sc minute /mo 15 15分ごとに実行
/sc hourly /mo 5 5時間ごとに実行
/sc daily /mo 3 /st 00:00 3日ごとに午前0時に実行
/sc weekly /mo 3 3週ごとに実行
/sc weekly /d mon,wed 毎週月曜日と水曜日に実行
/sc monthly /mo lastday 毎月月末に実行
/sc monthly /d 1 /m * 毎月1日に実行

また、タスクを作成する際は、最上位特権で実行させたり(/rl highest)、タスクを実行後に自動的に削除する(/z)、タスクの実行ユーザーを指定する(/ru)といったオプションも用意されています。

なお、schtasksコマンドでは上に紹介したタスクを作成する以外にも、さまざまなオプションを使ってタスクを削除したり、タスクの検索、タスクの即時実行といった管理ができます。

schtasksコマンドの詳しい使い方を知りたいときは、コマンドのヘルプ「schtasks /?」が役立つでしょう。

PowerShellコマンドレットで作成する

PowerShellコマンドレットでタスクを作成するときは、PowerShellを起動してRegister-ScheduledTaskコマンドレットを使って行い、基本的な書式は次のとおりです。

管理者権限が必要な設定やプログラムを実行する場合は、管理者権限でPowerShellを起動してタスクを作成する必要があります。

PS> Register-ScheduledTask -TaskName <タスクの名前> -Action <実行するプログラム> -Trigger <実行タイミング>

「-Action」オプションで指定する実行プログラムは、New-ScheduledTaskActionコマンドレットで定義し、「-Trigger」オプションで指定するタスクの実行タイミングは、New-ScheduledTaskTriggerコマンドレットで定義します。

たとえば「毎週金曜日の午後5時にシステム情報をファイルに格納する」というタスクを作成したい場合、以下のように実行します。

PS> $task=New-ScheduledTaskAction -Execute "msinfo32.exe" -Argument "/report E:\msinfo.txt"
PS> $trigger=New-ScheduledTaskTrigger -Weekly -DaysOfWeek Friday -At 5pm
PS> Register-ScheduledTask -TaskName "TestReport" -Trigger $trigger -Action $task

Register-ScheduledTaskコマンドレットでは、最上位特権で実行させたり(-RunLevel highest)、タスクの実行ユーザーを指定する(-User)といったオプションも用意されています。

New-ScheduledTaskActionコマンドレットでは、実行するプログラムに加えて、実行するプログラムのオプションを指定したり(-Argument)、作業フォルダーを指定する(-WorkingDirectory)こともできます。

New-ScheduledTaskTriggerコマンドレットでは、以下のようなオプションを使って実行タイミングを定義できます。

オプション 説明
-Once -At 3am 午前3時に1回だけ実行
-AtStartUp コンピュータの起動時に実行
-AtLogon ログオン時に実行
-Daily -At 3:00:00 毎日午前3時に実行
-Daily -DaysInterval 3 -At 3am 3日ごとの午前3時に実行
-Week 毎週実行
-Weekly -WeeksInterval 2 -DaysOfWeek Sunday -At 3am 隔週日曜日の午前3時に実行

なお、タスクを管理するコマンドレットとしては、タスクの設定情報を取得するGet-ScheduledTaskや、タスクの設定を変更できるSet-ScheduledTask、タスクを削除できるUnregister-ScheduledTaskが用意されています。

それぞれのコマンドの詳しい使い方は、Get-Helpコマンドレットを使ってコマンドの使用例を確認するのが役立つでしょう。

PS> Get-Help Register-ScheduledTask- -example

あとがき

タスクスケジューラでタスクの作成/編集/実行/削除などを頻繁に行う場合、GUI画面で行うのは正直手間がかかります。そのようなときは、上に紹介したようにコマンドで管理するのが効率的です。