次の方法で共有


スケジュールされたジョブについて

簡単な説明

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

長い説明

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

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

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

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

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

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

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

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

注意

タスク スケジューラでは、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-JobTriggerProcessJob のジョブ トリガーを取得します。 トリガーはスケジュールされたジョブに保存されるため、入力パラメーターはトリガーではなくスケジュールされたジョブを指定します。

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

この例では、コマンドレットの ContinueIfGoingOnBattery パラメーターをSet-ScheduledJob使用して、ProcessJobStopIfGoingOnBatteries プロパティを 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-JobPSScheduledJob モジュールが現在のセッションにインポートされている場合にのみ、スケジュールされたジョブを取得します。

ヒント

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

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-JobProcessJob スケジュール されたジョブの最新のインスタンスの結果を取得します (ID = 51)。

Receive-Job -ID 51

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

ジョブの結果は、このセッションでは使用できなくなりますが、新しいセッションを開始するか、新しい 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 プロパティがあります。 この再帰的な相互接続により、スケジュールされたジョブのトリガーとオプションを簡単に見つけ、ジョブ トリガーまたはジョブ オプションが関連付けられているスケジュールされたジョブを検索、スクリプト化、および表示できます。

こちらもご覧ください

about_Scheduled_Jobs_Basics

about_Scheduled_Jobs_Advanced

about_Scheduled_Jobs_Troubleshooting

タスク スケジューラ