次の方法で共有


about_Scheduled_Jobs

簡単な説明

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

詳細な説明

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

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

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

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

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

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

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

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

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

この例では、Set-ScheduledJob コマンドレットの ContinueIfGoingOnBattery パラメーターを使用して、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-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 コマンドレットは、スケジュールされたジョブ (ID = 51) のProcessJobの最新のインスタンスの結果を取得します。

Receive-Job -ID 51

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

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

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

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

Start-Job -DefinitionName ProcessJob

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

Unregister-ScheduledJob ProcessJob

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

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

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

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

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

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

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

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

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

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

関連項目