次の方法で共有


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

簡単な説明

ジョブの高度なスケジュールに関するトピックについて説明します。ジョブのスケジュールの基礎となるファイル構造を含みます。

長い説明

スケジュールされたジョブ ディレクトリとファイル

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

スケジュールされたジョブの Output ディレクトリには、その実行履歴が含まれています。 ジョブ トリガーがスケジュールされたジョブを開始するたびに、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 バックグラウンド ジョブです。 すべてのバックグラウンド ジョブと同様に、これらのジョブは直ちに開始され、ジョブ オプションの影響を受けたり、ジョブ トリガーの影響を受けたりすることはありません。 ジョブ出力は、スケジュールされたジョブ ディレクトリの Output ディレクトリに保存されません。

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

Start-Job -DefinitionName ProcessJob

ジョブを管理し、ジョブの結果を取得するには、ジョブ コマンドレットを使用します。 ジョブ コマンドレットの詳細については、「 about_Jobs」を参照してください。

注意

スケジュールされたジョブのインスタンスで Job コマンドレットを使用するには、 PSScheduledJob モジュールをセッションにインポートする必要があります。 PSScheduledJob モジュールをインポートするには、 などのGet-ScheduledJobスケジュールされたジョブ コマンドレットを入力Import-Module PSScheduledJobするか、使用します。

スケジュールされたジョブの名前を変更する

スケジュールされたジョブの名前を変更するには、 コマンドレットの Name パラメーターを Set-ScheduledJob 使用します。 スケジュールされたジョブの名前を変更すると、PowerShell はスケジュールされたジョブの名前とスケジュールされたジョブ ディレクトリを変更します。 ただし、既に実行されているスケジュールされたジョブのインスタンスの名前は変更されません。

開始時刻と終了時刻を取得する

ジョブ インスタンスが開始および終了した日付と時刻を取得するには、スケジュールされたジョブを返す ScheduledJob オブジェクトGet-JobPSBeginTime プロパティと PSEndTime プロパティを使用します。

次の例では、 コマンドレットの Property パラメーターを Format-Table 使用して、テーブル内の各ジョブ インスタンスの PSBeginTime プロパティと PSEndTime プロパティを表示します。 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 インスタンスの実行履歴と結果を保存します。 この値を変更するには、 または Set-ScheduledJob コマンドレットの MaxResultCount パラメーターをRegister-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

こちらもご覧ください

about_Scheduled_Jobs_Basics

about_Scheduled_Jobs_Troubleshooting

about_Scheduled_Jobs

about_Splatting.md

タスク スケジューラ