トップ回答者
New-ScheduledTaskSettingsSetで[タスクを開始するまでのコンピューターのアイドル時間]にチェックを入れる方法

質問
-
Windows Server 2012R2のサーバーでタスクスケジューラをPowerShellで登録することを試みています。
条件タブのアイドル設定を操作するためにテストでtechnetに載っていた以下のコマンドを実行しました。
$Sta = New-ScheduledTaskAction -Execute "Cmd" $Stset = New-ScheduledTaskSettingsSet -RunOnlyIfIdle -IdleDuration 00:02:00 -IdleWaitTimeout 02:30:00 Register-ScheduledTask task01 -Action $Sta -Settings $Stset
結果、タスクは登録され、IdleDurationとIdleWaitTimeoutに指定した時間の登録もされたのですが、
[タスクを開始するまでのコンピューターのアイドル時間]の有効化が出来ていませんでした。
-RunOnlyIfIdleを指定することでアイドル条件を有効化できるという理解だったのですが、
この理解が間違っており別のパラメーターを指定する必要があるのでしょうか?
回答
-
こんにちは。
牟田口さんのおしゃる様にWindows 2012 R2ではバグっている様です。
こちらのブログにも同様の事例が載っており、
$Sta = New-ScheduledTaskAction -Execute "Cmd" $Stset = New-ScheduledTaskSettingsSet -RunOnlyIfIdle -IdleDuration 00:02:00 -IdleWaitTimeout 02:30:00 $Sttrg = (Get-CimClass -ClassName 'MSFT_TaskIdleTrigger' -Namespace 'Root/Microsoft/Windows/TaskScheduler') Register-ScheduledTask task01 -Action $Sta -Settings $Stset -Trigger $Sttrg
の様に
$Sttrg = (Get-CimClass -ClassName 'MSFT_TaskIdleTrigger' -Namespace 'Root/Microsoft/Windows/TaskScheduler')
のトリガーを挟むことで不具合を回避できる様です。
<del>手元の環境ではこれで上手く動作しました。</del>
すいません。この手順でタスクにトリガーはつけることが出来ているのですが、最初の要求にある
> [タスクを開始するまでのコンピューターのアイドル時間]の有効化
ができていませんでした。(GUI上チェックが付かない...)
コマンドレットを使わずにschtasksを使うのが手っ取り早い回避策な気がします。
# XMLに記述したタスク情報を登録 schtasks /Create /TN task01 /XML .\idle-task.xml
idle-task.xml例
<?xml version="1.0" encoding="UTF-16"?> <Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Author>Administrator</Author> </RegistrationInfo> <Triggers> <IdleTrigger> <Enabled>true</Enabled> </IdleTrigger> </Triggers> <Principals> <Principal id="Author"> <UserId>Administrator</UserId> <LogonType>InteractiveToken</LogonType> <RunLevel>LeastPrivilege</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <Duration>PT2M</Duration> <WaitTimeout>PT2H30M</WaitTimeout> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>true</RunOnlyIfIdle> <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession> <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>P3D</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>Cmd</Command> </Exec> </Actions> </Task>
xmlファイルはGUIからエクスポートすると楽に作れますので環境に応じて直してください。
すべての返信
-
こんにちは。
牟田口さんのおしゃる様にWindows 2012 R2ではバグっている様です。
こちらのブログにも同様の事例が載っており、
$Sta = New-ScheduledTaskAction -Execute "Cmd" $Stset = New-ScheduledTaskSettingsSet -RunOnlyIfIdle -IdleDuration 00:02:00 -IdleWaitTimeout 02:30:00 $Sttrg = (Get-CimClass -ClassName 'MSFT_TaskIdleTrigger' -Namespace 'Root/Microsoft/Windows/TaskScheduler') Register-ScheduledTask task01 -Action $Sta -Settings $Stset -Trigger $Sttrg
の様に
$Sttrg = (Get-CimClass -ClassName 'MSFT_TaskIdleTrigger' -Namespace 'Root/Microsoft/Windows/TaskScheduler')
のトリガーを挟むことで不具合を回避できる様です。
<del>手元の環境ではこれで上手く動作しました。</del>
すいません。この手順でタスクにトリガーはつけることが出来ているのですが、最初の要求にある
> [タスクを開始するまでのコンピューターのアイドル時間]の有効化
ができていませんでした。(GUI上チェックが付かない...)
コマンドレットを使わずにschtasksを使うのが手っ取り早い回避策な気がします。
# XMLに記述したタスク情報を登録 schtasks /Create /TN task01 /XML .\idle-task.xml
idle-task.xml例
<?xml version="1.0" encoding="UTF-16"?> <Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Author>Administrator</Author> </RegistrationInfo> <Triggers> <IdleTrigger> <Enabled>true</Enabled> </IdleTrigger> </Triggers> <Principals> <Principal id="Author"> <UserId>Administrator</UserId> <LogonType>InteractiveToken</LogonType> <RunLevel>LeastPrivilege</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <Duration>PT2M</Duration> <WaitTimeout>PT2H30M</WaitTimeout> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>true</RunOnlyIfIdle> <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession> <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>P3D</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>Cmd</Command> </Exec> </Actions> </Task>
xmlファイルはGUIからエクスポートすると楽に作れますので環境に応じて直してください。