about_Scheduled_Jobs
簡単な説明
スケジュールされたジョブについて説明し、PowerShell とタスク スケジューラでスケジュールされたジョブを使用および管理する方法について説明します。
詳細な説明
PowerShell のスケジュールされたジョブは、PowerShell バックグラウンド ジョブとタスク スケジューラ タスクの便利なハイブリッドです。
PowerShell バックグラウンド ジョブと同様に、スケジュールされたジョブはバックグラウンドで非同期的に実行されます。 実行されたスケジュールされたジョブのインスタンスは、ジョブ コマンドレットを使用して管理できます (例: Start-Job
, Get-Job
, , Stop-Job
、 Receive-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-ScheduledJob
、 ProcessJob スケジュールされたジョブとそのジョブ インスタンスの保存されたすべての結果を削除します。
Unregister-ScheduledJob ProcessJob
スケジュールされたジョブの概念
スケジュールされたジョブは、コマンドまたはスクリプトを実行します。 スケジュールされたジョブには、ジョブを開始するジョブ トリガーと、ジョブを実行するための条件を設定するジョブ オプションを含めることができます。
ジョブ トリガーは、スケジュールされたジョブを自動的に開始します。 ジョブ トリガーには、1 回限りまたは定期的なスケジュールを含めたり、ユーザーがログオンしたときや Windows が開始されたときなどのイベントを指定したりできます。 スケジュールされたジョブには 1 つ以上のジョブ トリガーを含めることができます。また、ジョブ トリガーの作成、追加、有効化、無効化、取得を行うことができます。
ジョブ トリガーは省略可能です。 スケジュールされたジョブをすぐに開始するには、コマンドに Start-Job cmdlet
RunNow パラメーター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 プロパティがあります。 この再帰的相互接続により、スケジュールされたジョブのトリガーとオプションを簡単に見つけ、ジョブ トリガーまたはジョブ オプションが関連付けられているスケジュールされたジョブを検索、スクリプト化、および表示できます。
関連項目
PowerShell