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