about_Scheduled_Jobs_Basics

適用対象: Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

トピック

about_Scheduled_Jobs_Basics

概要

ジョブをスケジュールし、管理する方法について説明します。

詳細説明

このトピックでは、スケジュールされたジョブを作成および管理するための基本的なタスクを実行する方法について説明します。高度なタスクについては、「about_Scheduled_Jobs_Advanced」を参照してください。

スケジュールされたジョブの作成方法

スケジュールされたジョブを作成するには、Register-ScheduledJob コマンドレットを使用します。このコマンドレットには、名前と、ジョブで実行するコマンドまたはスクリプトが必要です。RunNow パラメーターを追加することでジョブをすぐに実行するか、ジョブの作成時かその後で、ジョブ トリガーを作成しジョブ オプションを設定します。

スクリプトを実行するジョブを作成するには、FilePath パラメーターを使用してスクリプト ファイルのパスを指定します。コマンドを実行するジョブを作成するには、ScriptBlock パラメーターを使用します。

次のコマンドでは、Get-Process コマンドを実行する ProcessJob を作成します。このスケジュールされたジョブは、既定のジョブ オプションを使用し、ジョブ トリガーはありません。

        PS C:\> Register-ScheduledJob -Name ProcessJob -ScriptBlock { Get-Process }

        Id         Name            Triggers        Command       Enabled
        --         ----            --------        -------       -------
        8          ProcessJob      {}              Get-Process   True

ジョブ トリガーの作成方法

ジョブ トリガーは、スケジュールされたジョブを自動的に開始します。ジョブ トリガーでは、1 回のみ、定期的なスケジュール、またはイベント (ユーザーがログオンしたときや Windows が起動したときなど) を指定できます。各ジョブには、ゼロ個、1 個、または複数のジョブ トリガーを設定できます。

ジョブ トリガーを作成するには、New-JobTrigger コマンドレットを使用します。次のコマンドは、毎週月曜日と木曜日の午前 5 時 00 分にジョブを開始するジョブ トリガーを作成します。ジョブ トリガーは $t 変数に保存されます。

        $t = New-JobTrigger -Weekly -DaysOfWeek "Monday", "Thursday" -At "5:00 AM"

ジョブ トリガーは省略可能です。Register-ScheduledJob コマンドに RunNow パラメーターを追加するか、Start-Job コマンドレットを使用することで、スケジュールされたジョブをいつでも開始できます。

ジョブ トリガーの追加方法

スケジュールされたジョブにジョブ トリガーを追加すると、ジョブ トリガーは、スケジュールされたジョブの XML ファイルに追加され、スケジュールされたジョブの一部になります。

ジョブ トリガーは、スケジュールされたジョブを作成するときに追加でき、後から追加することもできます。また、スケジュールされたジョブのジョブ トリガーはいつでも変更できます。

Windows PowerShell® では、タスク スケジューラで使用されるのと同じジョブ トリガーの一部が使用されます。ジョブ トリガーの詳細については、New-JobTrigger コマンドレットのヘルプ トピックを参照してください。ここにセクションの本文を挿入してください。

次のコマンドでは、Register-ScheduledJob コマンドレットを使用して、処理ジョブを作成します。Trigger パラメーターを使用して、$t 変数内のジョブ トリガーを指定します。

        Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Command} -Trigger $t

また、ジョブ トリガーは、既存のスケジュールされたジョブにいつでも追加できます。次のコマンドは、スケジュールされたジョブ ProcessJob に、$t 変数内のジョブ トリガーを追加します。

        Add-JobTrigger -Name ProcessJob -Trigger $t

このコマンドの結果、ジョブ トリガーが、毎週月曜日と木曜日の午前 5 時 00 分に ProcessJob を自動的に開始します。

ジョブ トリガーの取得方法

スケジュールされたジョブのジョブ トリガーを取得するには、Get-JobTrigger コマンドレットを使用します。Name、ID、および InputObject パラメーターを使用して、スケジュールされたジョブ (ジョブ トリガーではありません) を指定します。

次のコマンドは、ProcessJob のジョブ トリガーを取得します。

        PS C:\> Get-JobTrigger -Name ProcessJob

        Id   Frequency       Time                   DaysOfWeek              Enabled
        --   ---------       ----                   ----------              -------
        1    Weekly          11/7/2011 5:00:00 AM   {Monday, Thursday}      True

ジョブ オプションの作成方法

ジョブ オプションは、ジョブを開始および実行するための条件を設定します。すべてのジョブには、変更しない限り既定のジョブ オプションが設定されます。ジョブ オプションによっては、スケジュールされた時刻にジョブが実行されなくなる可能性があるため、ジョブ オプションについて理解し、慎重に使用することが重要です。

Windows PowerShell では、タスク スケジューラで使用されるのと同じジョブ オプションが使用されます。ジョブ オプションの詳細については、New-ScheduledJobOption コマンドレットのヘルプ トピックを参照してください。「Get-Help New-ScheduledJobOption」と入力するか、https://go.microsoft.com/fwlink/?LinkID=223915 でオンライン ヘルプ トピックを参照してください。

ジョブ オプションは、スケジュールされたジョブの XML ファイルに格納されます。ジョブ オプションは、スケジュールされたジョブを作成するときに設定でき、いつでも変更できます。

次のコマンドは、スケジュールされたジョブのオプション WakeToRun が True に設定された、スケジュールされたジョブのオプションを作成します。WakeToRun オプションは、コンピューターがスリープまたは休止状態であっても、スケジュールされた開始時刻にスケジュールされたジョブを実行します。このコマンドは、ジョブ オプションを $o 変数に保存します。

        $o = New-ScheduledJobOption -WakeToRun

ジョブ オプションの取得方法

スケジュールされたジョブのジョブ オプションを取得するには、Get-ScheduledJobOption コマンドレットを使用します。Name、ID、および InputObject パラメーターを使用して、スケジュールされたジョブ (ジョブ オプションではありません) を指定します。

次のコマンドは、ProcessJob のジョブ オプションを取得します。ここにセクションの本文を挿入してください。

        PS C:\> Get-ScheduledJobOption -Name ProcessJob

        StartIfOnBatteries     : False
        StopIfGoingOnBatteries : True
        WakeToRun              : False
        StartIfNotIdle         : True
        StopIfGoingOffIdle     : False
        RestartOnIdleResume    : False
        IdleDuration           : 00:10:00
        IdleTimeout            : 01:00:00
        ShowInTaskScheduler    : True
        RunElevated            : False
        RunWithoutNetwork      : True
        DoNotAllowDemandStart  : False
        MultipleInstancePolicy : IgnoreNew
        JobDefinition          : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition

ジョブ オプションの変更方法

スケジュールされたジョブのジョブ オプションは、スケジュールされたジョブを作成するときか、その後いつでも変更できます。

次のコマンドは、Register-JobTrigger コマンドレットを使用して、処理ジョブを作成します。ScheduledJobOption パラメーターを使用して、$o 変数内のジョブ オプションを指定しています。

        Register-JobTrigger -Name ProcessJob -ScriptBlock {Get-Process} -ScheduledJobOption $o

また、既存のスケジュールされたジョブのジョブ オプションはいつでも変更できます。次のコマンドは、Set-ScheduledJobOption コマンドレットを使用して、スケジュールされたジョブ ProcessJob の WakeToRun オプションの値を True に変更します。

PSScheduledJob モジュールのすべての Set コマンドレットと同様に、Set-ScheduledJobOption コマンドレットには、Name または ID パラメーターがありません。InputObject パラメーターを使用してスケジュールされたジョブのオプションを指定するか、Get-ScheduledJobOption コマンドレットから Set-ScheduledJobOption にスケジュールされたジョブをパイプで渡します。

次のコマンドは、Get-ScheduledJob コマンドレットを使用して ProcessJob を取得します。Get-ScheduledJobOption コマンドレットを使用して、ProcessJob の ジョブ オプションを取得し、Set-ScheduledJobOption コマンドレットを使用して ProcessJob の ジョブ オプション WakeToRun を True に変更しています。

        Get-ScheduledJob -Name ProcessJob | Get-ScheduledJobOption | Set-ScheduledJobOption -WakeToRun

スケジュールされたジョブのインスタンスの取得方法

スケジュールされたジョブが開始されると、Windows PowerShell は、標準的な Windows PowerShell バックグラウンド ジョブに似たジョブ インスタンスを作成します。Get-Job、Stop-Job、および Receive-Job などの Job コマンドレットを使用してイベント インスタンスを管理できます。

注記:スケジュールされたジョブのインスタンスに対して Job コマンドレットを使用するには、セッションに PSScheduledJob モジュールをインポートする必要があります。PSScheduledJob モジュールをインポートするには、「Import-Module PSScheduledJob」と入力するか、Get-ScheduledJob などのスケジュールされたジョブのコマンドレットを使用します。

Windows PowerShell のスケジュールされたジョブのすべてのインスタンス (およびアクティブなすべての標準ジョブ) を取得するには、Get-Job コマンドレットを使用します。次のコマンドは、PSScheduledJob モジュールをインポートし、ローカル コンピューター上のすべてのジョブを取得します。

        PS C:\> Import-Module PSScheduledJob

        PS C:\> Get-Job

次のコマンドは、ローカル コンピューター上の ProcessJob のすべてのインスタンスを取得します。

        PS C:\> Get-Job -Name ProcessJob

       Id     Name        PSJobTypeName  State    HasMoreData   Location   Command
        --     ----        ------------   -----    -----------   --------   -------
        45     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        46     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        47     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        48     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        49     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        50     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        51     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process

既定では、一般に同じスケジュールされたジョブのインスタンスを区別する開始時刻が表示されません。

次のコマンドは、Format-Table コマンドレットを使用して、スケジュールされたジョブの Name、ID、および BeginTime プロパティを表示します。

        PS C:\> Get-Job ProcessJob | Format-Table -Property Name, ID, BeginTime

        Name       Id BeginTime
        ----       -- ---------
        ProcessJob 43 11/2/2011 3:00:02 AM
        ProcessJob 44 11/3/2011 3:00:02 AM
        ProcessJob 45 11/4/2011 3:00:02 AM
        ProcessJob 46 11/5/2011 3:00:02 AM
        ProcessJob 47 11/6/2011 3:00:02 AM
        ProcessJob 48 11/7/2011 12:00:01 AM
        ProcessJob 49 11/7/2011 3:00:02 AM
        ProcessJob 50 11/8/2011 3:00:02 AM

スケジュールされたジョブの結果の取得

スケジュールされたジョブのインスタンスの結果を取得するには、Receive-Job コマンドレットを使用します。

注記:スケジュールされたジョブのインスタンスに対して Job コマンドレットを使用するには、セッションに PSScheduledJob モジュールをインポートする必要があります。PSScheduledJob モジュールをインポートするには、「Import-Module PSScheduledJob」と入力するか、Get-ScheduledJob などのスケジュールされたジョブのコマンドレットを使用します。

次のコマンドは、スケジュールされたジョブ ProcessJob の最新のインスタンス (ID = 51) の結果を取得します。

        PS C:\> Import-Module PSScheduledJob

        PS C:\> Receive-Job -ID 51 -Keep

スケジュールされたジョブの結果はディスクに保存されるため、Receive-Job の Keep パラメーターは必要ありません。ただし、Keep パラメーターを指定しないと、スケジュールされたジョブの結果を、Windows PowerShell セッションごとに 1 回しか取得できません。新しい Windows PowerShell セッションを開始するには、「PowerShell」と入力するか、新しい Windows PowerShell ウィンドウを開きます。

関連項目

about_Scheduled_Jobs

about_Scheduled_Jobs_Advanced

about_Scheduled_Jobs_Troubleshooting