Posted at

PowerShellでタスクスケジューラのオプションをセットする

More than 3 years have passed since last update.

Windowsでタスクスケジューラのタスクを生成するschtasksコマンドだと一部のオプションがセットできなかったので既存タスクのオプションをPowerShell経由でセットするメモです。

ちなみにやりたかったことは「次のネットワーク接続が使用可能な場合のみタスクを開始する」と「スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する」のオプションをONにするというやつです。

# タスク設定の取得

$taskSettings = (Get-ScheduledTask | where taskpath -eq \ | where TaskName -eq "mytask").Settings

# 条件>次のネットワーク接続が使用可能な場合のみタスクを開始する
$taskSettings.RunOnlyIfNetworkAvailable = "True"
# 設定>スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する
$taskSettings.StartWhenAvailable = "True"

# タスク設定を更新
Set-ScheduledTask -TaskName "mytask" -Settings $taskSettings

# 設定値を表示
(Get-ScheduledTask | where taskpath -eq \ | where TaskName -eq "mytask").Settings | select RunOnlyIfNetworkAvailable, StartWhenAvailable
Write-Host "タスクスケジュラーオプションを設定しました"

Get-ScheduledTask/Set-ScheduledTaskはPowerShell3.0(Windows8)以降で使えます。

バージョンチェックを入れたい場合は、こんなかんじのをスクリプトの先頭に入れておけばよいかと。

if ($PSVersionTable.PSVersion.Major -lt 3) {

$PSVersionTable.PSVersion
Write-Host "PowerShellのバージョンが古いためタスクスケジュラーオプションが設定できません"
Write-Host "Windows7の場合はタスクスケジュラーオプションを手動で設定して下さい"
exit 1
}

ちなみにWindows7でもやりたい場合はPSK Moduleというのを使えばできるらしい(?)のですが、試してません。

参考

* http://tech.guitarrapc.com/entry/2013/09/03/200909