PowerShellでタスクスケジューラを追加する
詳細設定編
今回はPowerShellでタスクスケジューラの詳細設定を定義するNew-ScheduledTaskSettingsSetコマンドについてご紹介します。
基本的なタスクスケジューラの登録方法はこちら、トリガーの詳細な登録方法はこちらをどうぞ。
対応する設定
New-ScheduledTaskSettingsSetコマンドはかなりオプションの多いコマンドです。
タスクスケジューラの設定画面と対応するオプションは下記のとおりです。
ここで記載のない項目はNew-ScheduledTaskAction、New-ScheduledTaskTrigger、Register-ScheduledTaskコマンドで設定することができます。
※説明のため下記画像では一部のチェックボックスを画像加工しています。本来、共存できない設定が存在しますがご容赦願います。。。
各オプションの解説
上記画像と同じような順番で解説していきます。
全般タブ
-Disable
このオプションを指定するとタスクが無効になります。無効になるとスケジュールされていた時刻になってもタスクは一切実行されません。引数は不要です。
-Hidden
このオプションを指定すると、タスクをバックグラウンドで実行します。ユーザーの作業の邪魔にならないようタスクを実行する必要がある場合はこのオプションを指定してください。引数は不要です。
条件タブ
-Compatibility
実務上、活用するシーンはほとんどありませんがタスクの実行環境を指定します。かなり古いOSを利用する場合なので、PowerShellコマンドとしてはほぼ無縁です。引数にWin7 Win8などを指定すると構成を指定できます。
-RunOnlyIfIdle, -IdleDuration, -IdleWaitTimeOut
この3つは組み合わせて使用します。RunOnlyIfIdleを指定してアイドル状態の処理を有効にします。
IdleDurationは指定した期間、アイドル状態が続いた場合にタスクを実行します。
IdleWaitTimeOutはトリガーされてからこの期間内にIdleDurationで指定した期間、アイドル状態が続かなければタスクは実行されません。
アイドル状態の定義は下記URLに詳細が記載されていますが、要約すると”ユーザーが一定時間マウスもキーボードも操作していない”もしくは”PCのCPU処理負荷が低い”場合にアイドル状態というフラグが設定されます。
https://docs.microsoft.com/ja-jp/windows/win32/taskschd/task-idle-conditions
RunOnlyIfIdleは引数不要、DurationとWaitTimeOutはTimeSpan型の引数が必要です。
-DontStopOnIdleEnd, -RestartOnIdle
既定ではアイドル状態から復帰したらタスクを停止しますが、DontStopOnIdleEndを指定するとアイドル状態から復帰してもタスクの実行は続行します。
RestartOnIdleを指定すると、一定期間アイドル状態⇒タスク実行⇒アイドル状態脱出⇒タスク停止⇒アイドル状態⇒タスク再開 のようにアイドル状態に戻るとタスクを再開します。
どちらのオプションも引数の指定は不要ですが、この2つのオプションを同時に指定することはできません(動作が相反するため)。
-AllowStartIfOnBatteries, -DontStopIfGoingOnBatteries
既定の設定ではバッテリ動作中にタスクは実行されませんが、AllowStartIfOnBatteriesを指定することでバッテリ動作中でもタスクを実行するようになります。
また、DontStopIfGoingOnBatteriesを指定すると、タスク実行中にバッテリ動作に切り替わった場合でもタスクを実行し続けるようになります。
ノートPCでタスクスケジューラを利用する場合はこのオプションを指定することが多いです。引数はどちらも不要です。
-WakeToRun
指定するとスリープ状態の場合にPCを起動してからタスクを実行します。なお、タスクは終了してもスリープ状態には戻らないので注意してください。引数は不要です。
-RunOnlyIfNetworkAvailable, -NetworkName
RunOnlyIfNetworkAvailableを指定すると、ネットワークに接続されているときのみタスクを実行します。
NetworkNameを指定すると、特定のネットワークに接続されたときだけタスクを実行します。ここに有線ネットワークを指定すれば有線LANが有効な場合にのみ実行することができます。
RnOnlyIfNetworkAvailableは引数不要、NetworkNameにはString型でネットワーク名を指定してください。
設定タブ
-DisallowDemandStart
このオプションを指定すると、タスクを手動実行できなくなります。手動実行とは、タスクを右クリックして実行することです。引数の指定はありません。
-StartWhenAvailable
このオプションを指定すると、トリガーで指定した時刻にタスクを実行できなかった場合、実行が可能になり次第タスクを再実行します。引数の指定はありません。
再実行するのはあくまでタスクを実行する状態だったけれど実行できなかった場合です。バッテリ状態では実行しない、既にタスク実行中で新しいインスタンスを開始しない設定になっている、などの条件で実行しなかった場合はこのオプションが有効でもタスクは再実行されません。
-RestartInterval
タスクが失敗した場合に指定した時間経過後、タスクの再実行を試みます。引数はTimeSpan型で試行間隔を指定します。
-RestartCount
RestartIntervalと組み合わせて指定した回数だけタスクの再実行を試みます。RestartIntervalを指定する場合はこのオプションが必須となります。Int型で繰り返し回数を指定します。
-ExecutionTimeLimit
タスクの最大実行時間を指定します。時間のかかる処理を実行した場合、ここで指定した時間に到達するとタスクを強制的に停止します。引数はTimeSpan型です。
-DisallowHardTerminate
既定の設定では、すでにタスクが実行中でタスク停止要求した場合に、実行中のタスクを強制的に停止します。このオプションを指定するとタスクを強制的に停止せずに、実行中のタスクが停止するまで待機します。
利用シーンはあまりないと思いますが、例え手動であっても停止させたくない場合は指定してください。引数は不要です。
-DeleteExpiredTaskAfter
このオプションを指定すると、タスクの再実行予定が無い場合に指定した期間を経過するとタスクを削除します。いわば不要なタスクを自動削除する機能です。
ただし、このオプションを指定するにはトリガーにかならず有効期限を設定してください。有効期限の指定が無いトリガーを設定しているとタスク登録時にエラーとなります。
引数はTimeSpan型を指定します。
-MultipleInstances
既にタスクが実行中で新しいトリガーが発生した場合の動作を指定します。String型で下記を指定します。
Parallel 実行中のタスクと並行で新しいタスクを実行
Queue 実行中のタスクが終わり次第、新しいタスクを実行
IgnoreNew 新しいタスクを実行しない
なお、タスクの実行単位は”インスタンス”といいます。