none
タスクスケジューラのトリガーをログオン時→アイドル時に変更 RRS feed

  • 質問

  • あるタスクスケジュールのトリガーが、現在ログオン時に設定されているのですが、

    これをアイドル時に変更したいと思っています。

    (Get-ScheduledTask | where taskpath -eq \ | where TaskName -eq "TaskName").Triggers

    としても、それらしい情報を取得しません。ちなみに、取得する情報は下記の通りです。

    Enabled            : True
    EndBoundary        :
    ExecutionTimeLimit :
    Id                 :
    Repetition         : MSFT_TaskRepetitionPattern
    StartBoundary      :
    PSComputerName     :

    タスクスケジューラのトリガーをログオン時からアイドル時に変更するには、どのようなトリガー設定を行えばよいのでしょうか。

    2015年3月31日 4:07

すべての返信

  • 注:この回答は結局解決には至ってません。どなたか、分かる方にフォローいただければ幸いです。

    まず、トリガーの種類はプロパティで定義されているのではなく、WMIクラスそのものがトリガーの種類ごとに定義されています。

    たとえば、「ログオン時」は「MSFT_TaskLogonTrigger」、
    「アイドル時」は「MSFT_TaskIdleTrigger」です。

    したがって、トリガーの種類が何であるかを調べるには、

    Get-ScheduledTask -TaskName TaskName | select -ExpandProperty triggers | foreach {$_.CimClass.CimClassName}

    のようにすれば良いかと思います。

    次に本題の、トリガーの種類を変更する方法についてですが、トリガーはNew-ScheduledTaskTriggerコマンドレットで作成できます。

    たとえばトリガーを「ログオン時」に変更するには、

    Set-ScheduledTask -TaskName TaskName -Trigger (New-ScheduledTaskTrigger -AtLogon)

    のようにすればOKです。

    が、「アイドル時」のトリガーを作成するパラメータはどうも無いようです。(ScheduledTasksモジュールのコマンドレットは何故かこういうよく分からない実装抜けがいくつかあります)

    New-CimInstanceコマンドレットでMSFT_TaskIdleTriggerオブジェクトを作成して、Get-ScheduledTaskコマンドレットで取得したMSFT_ScheduledTaskオブジェクトのTriggersプロパティに追加してやろうと思ったのですが、Set-CimInstanceコマンドレットはModifyInstanceメソッドを受け付けないため機能せず…。

    作成したMSFT_TaskIdleTriggerオブジェクトをSet-ScheduledTask -Triggerで指定してやろうとしても、型が違うと怒られました。

    ScheduledTasksモジュールをあきらめて、schedule.serviceというCOMオブジェクトを使うしかないかもしれません。

    以下に例があります。

    Hey, Scripting Guy! コンピューターがアイドル状態のときにスクリプトを実行する方法はありますか 

    すごく負けた気分ですが…

    2015年3月31日 9:17
    モデレータ