about_Scheduled_Jobs_Advanced
簡単な説明
ジョブの高度なスケジュールに関するトピックについて説明します。ジョブのスケジュールの基礎となるファイル構造を含みます。
詳細な説明
PSScheduledJob モジュールに含まれるコマンドレットの詳細については、PSScheduledJob を参照してください。
スケジュールされたジョブ ディレクトリとファイル
PowerShell のスケジュールされたジョブは、PowerShell ジョブとタスク スケジューラ タスクの両方です。 スケジュールされた各ジョブはタスク スケジューラに登録され、Microsoft .NET Framework シリアル化 XML 形式でディスクに保存されます。
スケジュールされたジョブを作成すると、PowerShell によって、スケジュールされたジョブのディレクトリがローカル コンピューター上の $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
ディレクトリに作成されます。 ディレクトリ名はジョブ名と同じです。
ScheduledJobs ディレクトリの例 を次に 示します。
Get-ChildItem $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
Directory: C:\Users\User01\AppData\Local
\Microsoft\Windows\PowerShell\ScheduledJobs
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 9/29/2011 10:03 AM ArchiveProjects
d---- 9/30/2011 1:18 PM Inventory
d---- 10/20/2011 9:15 AM Backup-Scripts
d---- 11/7/2011 10:40 AM ProcessJob
d---- 11/2/2011 10:25 AM SecureJob
d---- 9/27/2011 1:29 PM Test-HelpFiles
d---- 9/26/2011 4:22 PM DeployPackage
スケジュールされた各ジョブには、独自のディレクトリがあります。 このディレクトリには、スケジュールされたジョブ XML ファイルと Output サブディレクトリが含まれています。
$Path = "$HOME\AppData\Local\Microsoft\Windows\PowerShell"
$Path += "\ScheduledJobs\ProcessJob"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell
\ScheduledJobs\ProcessJob
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 11/1/2011 3:00 PM Output
-a--- 11/1/2011 3:43 PM 7281 ScheduledJobDefinition.xml
スケジュールされたジョブの出力ディレクトリには、その実行履歴が含まれています。 ジョブ トリガーがスケジュールされたジョブを開始するたびに、PowerShell はタイムスタンプ名のディレクトリを出力ディレクトリに作成します。 timestamp ディレクトリには、Results.xml ファイル内のジョブの結果と、Status.xml ファイル内のジョブの状態が含まれます。
次のコマンドは、ProcessJob スケジュールされたジョブの実行履歴ディレクトリを示しています。
$Path = "$HOME\AppData\Local\Microsoft"
$Path += "\Windows\PowerShell\ScheduledJobs\ProcessJob\Output"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft
\Windows\PowerShell\ScheduledJobs\ProcessJob\Output
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 11/2/2011 3:00 AM 20111102-030002-260
d---- 11/3/2011 3:00 AM 20111103-030002-277
d---- 11/4/2011 3:00 AM 20111104-030002-209
d---- 11/5/2011 3:00 AM 20111105-030002-251
d---- 11/6/2011 3:00 AM 20111106-030002-174
d---- 11/7/2011 12:00 AM 20111107-000001-914
d---- 11/7/2011 3:00 AM 20111107-030002-376
$Path = "$HOME\AppData\Local\Microsoft\Windows\PowerShell\"
$Path += "ScheduledJobs\ProcessJob\Output\20111102-030002-260"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell
\ScheduledJobs\ProcessJob\Output\20111102-030002-260
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 11/2/2011 3:00 AM 581106 Results.xml
-a--- 11/2/2011 3:00 AM 9451 Status.xml
ファイルのScheduledJobDefinition.xml、Results.xml、Status.xmlを開いて調べたり、コマンドレットをSelect-XML
使用してファイルを解析したりできます。
警告
XML ファイルは編集しないでください。 XML ファイルに無効な XML が含まれている場合、PowerShell はスケジュールされたジョブとその実行履歴 (ジョブの結果を含む) を削除します。
スケジュールされたジョブをすぐに開始する
スケジュールされたジョブは、次の 2 つの方法のいずれかですぐに開始できます。
- コマンドレットを
Start-Job
実行して、スケジュールされたジョブを開始します。 - RunNow パラメーターを
Register-ScheduledJob
コマンドに追加して、コマンドが実行されるとすぐにジョブを開始します。
コマンドレットを使用 Start-Job
して開始されるジョブは、スケジュールされたジョブのインスタンスではなく、標準の PowerShell バックグラウンド ジョブです。 すべてのバックグラウンド ジョブと同様に、これらのジョブはすぐに開始され、ジョブ オプションの影響を受けたり、ジョブ トリガーの影響を受けたりすることはありません。 ジョブの出力は、スケジュールされたジョブ ディレクトリの 出力 ディレクトリに保存されません。
次のコマンドでは、コマンドレットの DefinitionName パラメーターを Start-Job
使用して、ProcessJob スケジュールされたジョブを開始します。
Start-Job -DefinitionName ProcessJob
ジョブを管理し、ジョブの結果を取得するには、ジョブ コマンドレットを使用します。 ジョブ コマンドレットの詳細については、「about_Jobs」を参照してください。
Note
スケジュールされたジョブのインスタンスで Job コマンドレットを使用するには、 PSScheduledJob モジュールをセッションにインポートする必要があります。 PSScheduledJob モジュールをインポートするには、Import-Module PSScheduledJob
スケジュールされたジョブ コマンドレット (例Get-ScheduledJob
: .
スケジュールされたジョブの名前を変更する
スケジュールされたジョブの名前を変更するには、コマンドレットの Name パラメーターを Set-ScheduledJob
使用します。 スケジュールされたジョブの名前を変更すると、スケジュールされたジョブの名前とスケジュールされたジョブ ディレクトリが PowerShell によって変更されます。 ただし、既に実行されているスケジュールされたジョブのインスタンスの名前は変更されません。
開始時刻と終了時刻を取得する
ジョブ インスタンスが開始および終了した日時を取得するには、スケジュールされたジョブに対して返される ScheduledJob オブジェクトGet-Job
の PSBeginTime プロパティと P Standard Edition ndTime プロパティを使用します。
次の例では、コマンドレットの Property パラメーターをFormat-Table
使用して、テーブル内の各ジョブ インスタンスの PSBeginTime プロパティと P Standard Edition ndTime プロパティを表示します。 Label という名前の計算プロパティには、各ジョブ インスタンスの経過時間が表示されます。
Get-job -Name UpdateHelpJob |
Format-Table -Property ID, PSBeginTime, PSEndTime,
@{Label="Elapsed Time";Expression={$.PsEndTime - $.PSBeginTime}}
Id PSBeginTime PSEndTime Elapsed Time
-- ----------- --------- ------------
2 11/3/2011 3:00:01 AM 11/3/2011 3:00:39 AM 00:00:38.0053854
3 11/4/2011 3:00:02 AM 11/4/2011 3:01:01 AM 00:00:59.1188475
4 11/5/2011 3:00:02 AM 11/5/2011 3:00:50 AM 00:00:48.3692034
5 11/6/2011 3:00:01 AM 11/6/2011 3:00:54 AM 00:00:52.8013036
6 11/7/2011 3:00:01 AM 11/7/2011 3:00:38 AM 00:00:37.1930350
7 11/8/2011 3:00:01 AM 11/8/2011 3:00:57 AM 00:00:56.2570556
8 11/9/2011 3:00:03 AM 11/9/2011 3:00:55 AM 00:00:51.8142222
9 11/10/2011 3:00:02 AM 11/10/2011 3:00:42 AM 00:00:40.7195954
実行履歴の管理
スケジュールされたジョブごとに保存されるジョブ インスタンスの結果の数を確認し、スケジュールされたジョブの実行履歴と保存されたジョブの結果を削除できます。
スケジュールされたジョブの ExecutionHistoryLength プロパティは、スケジュールされたジョブに対して保存されるジョブ インスタンスの結果の数を決定します。 保存された結果の数が ExecutionHistoryLength プロパティの値を超えると、PowerShell は最も古いインスタンスの結果を削除して、最新のインスタンスの結果を取得できるようにします。
既定では、PowerShell は、スケジュールされた各ジョブの 32 個のインスタンスの実行履歴と結果を保存します。 この値を変更するには、またはコマンドレットの MaxResultCount パラメーターを Register-ScheduledJob
使用 Set-ScheduledJob
します。
スケジュールされたジョブの実行履歴とすべての結果を削除するには、コマンドレットの ClearExecutionHistory パラメーターを Set-ScheduledJob
使用します。 この実行履歴を削除しても、スケジュールされたジョブの新しいインスタンスの結果が PowerShell によって保存されるわけではありません。
次の例では、スプラッティングを使用して、コマンドレットに渡されるパラメーター値をRegister-ScheduledJob
作成$JobParms
します。 詳細については、about_Splatting.md を参照 してください。
Register-ScheduledJob
スケジュールされたジョブの作成に使用@JobParms
されます。 このコマンドでは、 MaxResultCount パラメーターの値を 12 にして、スケジュールされたジョブの最新のジョブ インスタンスの結果を 12 個だけ保存します。
$JobParms = @{
Name = "ProcessJob"
ScriptBlock = {Get-Process}
MaxResultCount = "12"
}
Register-ScheduledJob @JobParms
次のコマンドでは、コマンドレットの MaxResultCount パラメーターを Set-ScheduledJob
使用して、保存されたインスタンスの結果の数を 15 に増やします。
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 15
次のコマンドは、ProcessJob スケジュールされたジョブの実行履歴と現在保存されている結果を削除します。
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
次のコマンドは、コンピューター上のすべてのスケジュールされたジョブの名前と ExecutionHistoryLength プロパティの値を取得し、テーブルに表示します。
Get-ScheduledJob |
Format-Table -Property Name, ExecutionHistoryLength -AutoSize
関連項目
PowerShell