about_Scheduled_Jobs

簡単な説明

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

詳細な説明

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

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

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

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

この包括的で柔軟なツールセットにより、スケジュールされたジョブは、多くのプロフェッショナルな PowerShell IT ソリューションの不可欠なコンポーネントになります。

スケジュールされたジョブ コマンドレットは、PowerShell と 共にインストールされる PSScheduledJob モジュールに含まれています。 このモジュールは PowerShell 3.0 で導入され、PowerShell 3.0 以降のバージョンの PowerShell で動作します。 PSScheduledJob モジュールに含まれるコマンドレットの詳細については、PSScheduledJob を参照してください

PowerShell バックグラウンド ジョブの詳細については、「about_Jobs」を参照してください

タスク スケジューラの詳細については、「タスク スケジューラ」を参照してください

Note

タスク スケジューラでは、PowerShell のスケジュールされたジョブを表示および管理できます。 PowerShell ジョブとスケジュールされたジョブ コマンドレットは、PowerShell で作成されたスケジュールされたジョブでのみ機能します。

クイック スタート

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

$trigger = New-JobTrigger -Daily -At 3AM
$options = New-ScheduledJobOption -StartIfOnBattery
Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Process} `
-Trigger $trigger -ScheduledJobOption $options

このコマンドレットは Get-ScheduledJob 、ローカル コンピューターでスケジュールされたジョブを取得します。

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

Get-JobTrigger は ProcessJob のジョブ トリガーを 取得します。 トリガーはスケジュールされたジョブに保存されるため、入力パラメーターはトリガーではなくスケジュールされたジョブを指定します。

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

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

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

このコマンドレットはGet-ScheduledJob、ProcessJob のスケジュールされたジョブを取得します。

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

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

ヒント

スケジュールされたジョブ コマンドレットを使用してスケジュールされたジョブを管理しますが、ジョブ コマンドレットを使用してスケジュールされたジョブのインスタンスを管理していることに注意してください。

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

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

Receive-Job -ID 51

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

ジョブの結果は、このセッションでは使用できなくなりますが、新しいセッションを開始するか、新しい PowerShell ウィンドウを開くと、ジョブの結果が再び使用できるようになります。

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

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

Start-Job -DefinitionName ProcessJob

このコマンドレットは Unregister-ScheduledJobProcessJob スケジュールされたジョブとそのジョブ インスタンスの保存されたすべての結果を削除します。

Unregister-ScheduledJob ProcessJob

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

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

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

ジョブ トリガーは省略可能です。 スケジュールされたジョブをすぐに開始するには、コマンドに Start-Job cmdletRunNow パラメーターRegister-ScheduledJob追加します。

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

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

スケジュールされたジョブはディスクに保存され、 Register代わりに Newコマンドレット動詞を使用します。 XML ファイルは、ディレクトリ $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs内のローカル コンピューターにあります。

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

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

スケジュールされたジョブは ScheduledJobDefinition オブジェクトとして表示されます。 ScheduledJobDefinition オブジェクトには、スケジュールされたジョブのジョブ トリガーを含む JobTriggers プロパティと、ジョブ オプションを含む Options プロパティがあります。 ジョブ トリガーとジョブ オプションを表す ScheduledJobTriggers オブジェクトと ScheduledJobOptions オブジェクトにはそれぞれ、関連付けられているスケジュールされたジョブを含む JobDefinition プロパティがあります。 この再帰的相互接続により、スケジュールされたジョブのトリガーとオプションを簡単に見つけ、ジョブ トリガーまたはジョブ オプションが関連付けられているスケジュールされたジョブを検索、スクリプト化、および表示できます。

関連項目