PowerShellでタスクスケジューラを追加する(基礎編)
タスクスケジューラの登録をコマンドで実行する方法としては他にschtasksがありますが、登録できるオプションはPowerShellの方が豊富だと思います。
主なコマンド
PowerShellでタスクスケジューラを登録するにはScheduledTasksモジュールを使います。
モジュールに含まれるコマンドはMicrosoft Docsに記載があります。
https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/?view=windowsserver2022-ps
さて、schtasksコマンドに比べてかなりたくさんのコマンドが用意されておりとっつきにくいですが、基本のコマンドは下記の4つだけです。
- New-ScheduledTaskTrigger
- New-ScheduledTaskAction
- New-ScheduledTaskSettingsSet(任意)
- Register-ScheduledTask
タスクスケジューラ登録の流れはNew-ScheduleTaskActionで実行内容を作成、New-ScheduledTaskTriggerで実行スケジュールを作成、Register-ScheduledTaskで新規タスクを登録という感じです。
細かい設定についてはNew-ScheduledTaskSettingsSetで定義しますが、こちらは必須ではありません。バッテリ稼働中でも実行するとか、タスクがすでに実行中の場合はどうするかなどの設定を定義します。
New-ScheduledTaskTrigger
タスクを実行するスケジュールを登録します。主な使用例は下記のとおりです。
$Trigger = New-ScheduledTaskTrigger -Once -At 10:00 #午前10時に1回だけ実行します。
$Trigger = New-ScheduledTaskTrigger -Daily -At 10:00 #毎日午前10時に実行します。
$Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Friday -At 10:00 #毎週金曜午前10時に実行します。
$Trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Minutes 5) -Once -At (Get-Date) #5分ごとに無制限で実行し続けます。
その他の特殊な設定方法についてはこちらを参考にしてください。
New-ScheduledTaskAction
タスクで実行する内容を登録します。主な使用例は下記のとおりです。
$Action = New-ScheduledTaskAction cmd.exe #コマンドプロンプトを起動します。
$Action = New-ScheduledTaskAction -Execute "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" -Argument "--new-window "https://www.google.co.jp"" #Edgeの新しいウィンドウでGoogleを開きます。
$Action = New-ScheduledTaskAction -Execute cmd.exe -WorkingDirectory "C:\test" #C:\testをカレントディレクトリにしてコマンドプロンプトを起動します。
このコマンドはそれほどオプションは多くないので、上記の使い方がメインになってきます。
New-ScheduledTaskSettingsSet
タスクの細かい設定事項を定義します。オプションはかなり多いので、ここでは一部のみご紹介します。その他のオプションについてはこちらをご確認ください。
$Settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Minutes 30) #30分以内にタスクが終了しない場合に自動でタスクを停止します。
#Settings = New-ScheduledTaskSettingsSet -WakeToRun #タスクを実行するためにスリープを解除する
$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
#コンピュータがバッテリで稼働している場合でも、バッテリに切り替わった場合でもタスクを実行する。(”コンピュータをAC電源で使用している場合のみタスクを開始する”のオプションチェックを外した状態と同じ)
なお、この定義はタスク作成において必須ではなく、オプションの設定が必要な時だけ指定します。
なにも定義しなかった場合はタスクスケジューラのデフォルト設定が適用されます。
デフォルト設定はNew-ScheduledTaskSettingsSetコマンドの引数を無指定で実行した場合に作成されるオブジェクトの中身で確認ができます。
ただ、ぱっと見ではわかりづらいのでテストでタスクを1つ作成してからタスクスケジューラの画面で確認するほうが簡単かもしれません。
Register-ScheduledTask
先ほど定義したTrigger、Action、SerttingsSet(あれば)を使ってタスクを登録します。
このコマンドを実行しない限り、タスクスケジューラにタスクは登録されないのでご注意ください。
Register-ScheduledTask -TaskName "Test Task" -Action $Action -Trigger $Trigger #定義したTrigger、Actionに基づいてTest Taskという名前のタスクを登録します。
Register-ScheduledTask -TaskName "Test Task" -Action $Action -Trigger $Trigger -Settings $Settings #定義したSettingsSetの内容も含めてタスクを登録します。
Register-ScheduledTask -TaskName "Test Task" -Action $Action -Trigger $Trigger -Force #同じ名前のタスクが登録されている場合に、強制的に上書きします(Forceオプションをつけないまま同じ名前のタスクを登録しようとするとエラーになります)。
タスクが無事に登録されると、タスクが登録されたパス、タスクの名前、状態が表示されます。
まとめ
- schtasksよりPowerShellコマンドのほうがオプションは豊富
- Trigger, Actionを定義してRegisterでタスク登録
- SettingsSetは必要に応じてどうぞ