about_Scheduled_Jobs

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

トピック

about_Scheduled_Jobs

概要

ジョブのスケジュールについて説明し、Windows PowerShell® とタスク スケジューラでスケジュールされたジョブを使用する方法と管理する方法について説明します。

詳細説明

Windows PowerShell のスケジュールされたジョブは、Windows PowerShell のバックグラウンド ジョブとタスク スケジューラのタスクを統合した便利なハイブリッドのジョブです。

Windows PowerShell のバックグラウンド ジョブと同様に、スケジュールされたジョブはバックグラウンドで非同期に実行されます。スケジュールされたジョブの実行済みインスタンスは、Start-Job、Get-Job、Stop-Job、Receive-Job などのジョブのコマンドレットを使用して管理できます。

タスク スケジューラのタスクと同様に、スケジュールされたジョブはディスクに保存されます。タスク スケジューラでのジョブの表示と管理、必要に応じたジョブの有効化と無効化、ジョブを開始する 1 回限りまたは定期的なスケジュールの設定、ジョブを開始する条件の設定を実行できます。

さらに、スケジュールされたジョブのインスタンスの結果は、簡単にアクセスできる形式でディスクに保存され、ジョブの出力の実行ログになります。スケジュールされたジョブには、それらのジョブを管理するためのカスタマイズされた一連のコマンドレットがあります。それらのコマンドレットを使用して、スケジュールされたジョブ、ジョブ トリガー、ジョブ オプションの作成、編集、管理、無効化、再有効化を実行することができます。

この包括的で柔軟な一連のツールがあることで、スケジュールされたジョブは、多くの専門的な Windows PowerShell IT ソリューションにとって不可欠な要素になっています。

スケジュールされたジョブのコマンドレットは、Windows PowerShell と共にインストールされる PSScheduledJob モジュールに格納されています。このモジュールは、Windows PowerShell 3.0 で導入され、Windows PowerShell 3.0 以降のバージョンの Windows PowerShell で機能します。

Windows PowerShell のバックグラウンド ジョブの詳細については、「About_Jobs」(https://go.microsoft.com/fwlink/?LinkID=113251) を参照してください。

タスク スケジューラの詳細については、TechNet ライブラリのタスク スケジューラに関するページ (https://go.microsoft.com/fwlink/?LinkId=232928) を参照してください。

注記:タスク スケジューラで Windows PowerShell のスケジュールされたジョブを表示し、管理できます。ただし、Windows PowerShell のジョブとスケジュールされたジョブのコマンドレットは、Windows PowerShell で作成されたスケジュールされたジョブでのみ動作します。

スケジュールされたジョブのコマンドレット

PSScheduledJob モジュールには、次のコマンドレットが格納されています。

    Register-ScheduledJob:       Creates a scheduled job.
    Get-ScheduledJob:            Gets a scheduled job.
    Set-ScheduledJob:            Changes the properties of a scheduled job
    Disable-ScheduledJob:        Temporarily disables a scheduled job.
    Enable-ScheduledJob:         Re-enables a scheduled job.
    Unregister-ScheduledJob      Deletes a scheduled job and its saved results.

    New-JobTrigger:              Creates a job trigger.
    Get-JobTrigger:              Gets a job trigger.
    Add-JobTrigger:              Adds a job trigger to a scheduled job.
    Set-JobTrigger:              Changes a job trigger.
    Disable-JobTrigger:          Temporarily disables a job trigger.
    Enable-JobTrigger:           Re-enables a job trigger.
    Remove-JobTrigger:           Deletes a job trigger.

    New-ScheduledJobOption:      Creates a job options object.
    Get-ScheduledJobOption:      Gets the job options of a scheduled job.
    Set-ScheduledJobOption:      Changes the job options of a scheduled job.

クイック スタート

次のコマンドは、毎日午前 3 時に開始され、Get-Process コマンドレットを実行する、スケジュールされたジョブを作成します。コンピューターがバッテリで動作している場合でも、ジョブは開始されます。

        $trigger = New-JobTrigger -Daily -At 3AM

        $options = New-ScheduledJobOption -StartIfOnBattery

        Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Process} `
            -Trigger $trigger -ScheduledJobOption $options

次のコマンドは、ローカル コンピューター上のスケジュールされたジョブを取得します。

        PS C:\> Get-ScheduledJob

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

次のコマンドは、ProcessJob のジョブ トリガーを取得します。入力パラメーターに、ジョブ トリガーではなく、スケジュールされたジョブを指定するのは、ジョブ トリガーがスケジュールされたジョブに保存されているためです。

        PS C:\> Get-JobTrigger -Name ProcessJob

        Id         Frequency       Time                   DaysOfWeek              Enabled
        --         ---------       ----                   ----------              -------
        1          Daily           11/5/2011 3:00:00 AM                           True

次のコマンドは、Set-ScheduledJob コマンドレットの ContinueIfGoingOnBattery パラメーターを使用して、ProcessJob の StopIfGoingOnBatteries プロパティを False に変更します。

        PS C:\> Get-ScheduledJob -Name ProcessJob | Set-ScheduledJobOption `
               -ContinueIfGoingOnBattery -Passthru

        StartIfOnBatteries     : True
        StopIfGoingOnBatteries : False
        WakeToRun              : True
        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

次のコマンドは、スケジュールされたジョブ ProcessJob を取得します。

        PS C:\> Get-ScheduledJob ProcessJob

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

次のコマンドは、Get-Job コマンドレットを使用して、スケジュールされたジョブ ProcessJob のこれまでに実行されたすべてのインスタンスを取得します。Get-Job コマンドレットは、PSScheduledJob モジュールが現在のセッションにインポートされたときにのみ、スケジュールされたジョブを取得します。

ヒント: スケジュールされたジョブの管理には ScheduledJob コマンドレットを使用しますが、スケジュールされたジョブのインスタンスの管理には Job コマンドレットを使用します。

        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

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

        Receive-Job -ID 51    

Receive-Job コマンドで Keep パラメーターを使用しなかった場合でも、ジョブの結果は、削除されるか結果の最大数を超過するまで、ディスクに保存されます。

ジョブの結果はこのセッションでは使用できなくなりますが、新しいセッションを開始した場合や新しい Windows PowerShell ウィンドウを開いた場合は、ジョブの結果を再度使用できます。

次のコマンドは、Start-Job コマンドレットの DefinitionName パラメーターを使用して、スケジュールされたジョブ ProcessJob を開始します。

Start-Job コマンドレットを使用して開始されたジョブは、スケジュールされたジョブのインスタンスではなく、標準の Windows PowerShell バックグラウンド ジョブとなります。すべてのバックグラウンド ジョブのように、これらのジョブはすぐに開始されます。ジョブのオプションは適用されず、ジョブ トリガーの影響も受けません。また、スケジュールされたジョブのディレクトリの Output ディレクトリに出力が保存されません。

         PS C:\>Start-Job -DefinitionName ProcessJob

次のコマンドは、スケジュールされたジョブ ProcessJob とそのジョブのインスタンスの保存されたすべての結果を削除します。

        PS C:\> Remove-ScheduledJob ProcessJob

スケジュールされたジョブの概念

"スケジュールされたジョブ" は、コマンドまたはスクリプトを実行します。スケジュールされたジョブには、ジョブを開始する "ジョブ トリガー" とジョブを実行するための条件を設定する "ジョブ オプション" を含めることができます。

"ジョブ トリガー" は、スケジュールされたジョブを自動的に開始します。ジョブ トリガーでは、1 回限りまたは定期的なスケジュールを使用することや、イベント (ユーザーがログオンしたときや Windows が起動したときなど) を指定することができます。スケジュールされたジョブには、1 つ以上のジョブ トリガーを使用できます。ユーザーは、ジョブ トリガーを作成、追加、有効化、無効化、取得できます。

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

"ジョブ オプション" は、スケジュールされたジョブを実行するための条件を設定します。すべてのスケジュールされたジョブに、ジョブ オプション オブジェクトが 1 つ含まれます。ジョブ オプション オブジェクトを作成して編集し、1 つまたは複数のスケジュールされたジョブに追加できます。

スケジュールされたジョブが開始されるたびに、"ジョブ インスタンス" が作成されます。ジョブ インスタンスの表示と管理には、Windows PowerShell Job コマンドレットを使用します。

スケジュールされたジョブは、ローカル コンピューターのディスクの $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs ディレクトリに XML ファイルで保存されます (したがってコマンドレットの動詞は、New ではなく Register です)。

Windows PowerShell では、スケジュールされたジョブごとにディレクトリが作成され、ジョブ コマンド、ジョブ トリガー、ジョブ オプション、ジョブの結果がスケジュールされたジョブのディレクトリに保存されます。ジョブ トリガーとジョブ オプションは、ディスクに別々には保存されません。関連付けられているスケジュールされた各ジョブの、スケジュールされたジョブの XML に格納されます。

スケジュールされたジョブ、ジョブ トリガー、ジョブ オプションは、Windows PowerShell にオブジェクトとして表示されます。オブジェクトは相互にリンクされるため、コマンドやスクリプトでの検出や使用が簡単です。

スケジュールされたジョブは、ScheduledJobDefinition オブジェクトとして表示されます。ScheduledJobDefinition オブジェクトには、スケジュールされたジョブのジョブ トリガーが含まれた JobTriggers プロパティとジョブ オプションが含まれた Options プロパティがあります。それぞれジョブ トリガーとジョブ オプションを表す ScheduledJobTriggers と ScheduledJobOptions の各オブジェクトには、関連付けられているスケジュールされたジョブが含まれた JobDefinition プロパティがあります。この再帰的な相互接続により、スケジュールされたジョブのジョブ トリガーとジョブ オプションを検索しやすくなり、ジョブ トリガーまたはジョブ オプションが関連付けられているスケジュールされたジョブの検索、記述、表示が容易になります。

関連項目

about_Scheduled_Jobs_Basics

about_Scheduled_Jobs_Advanced

about_Scheduled_Jobs_Troubleshooting

about_jobs

タスク スケジューラ (https://go.microsoft.com/fwlink/?LinkId=232928)

Add-JobTrigger

Disable-JobTrigger

Disable-ScheduledJob

Enable-JobTrigger

Enable-ScheduledJob

Get-Job

Get-JobTrigger

Get-ScheduledJob

Get-ScheduledJobOption

New-JobTrigger

New-ScheduledJobOption

Receive-Job

Register-ScheduledJob

Remove-JobTrigger

Set-JobTrigger

Set-ScheduledJob

Set-ScheduledJobOption

Start-Job

Unregister-ScheduledJob