about_Scheduled_Jobs_Advanced

適用対象: Windows PowerShell 3.0

トピック

about_Scheduled_Jobs_Advanced

概要

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

詳細説明

このトピックには、次のセクションが含まれています。

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

  • -- スケジュールされたジョブの名前の変更

  • -- スケジュールされたジョブの即時開始

  • -- 実行履歴の管理

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

Windows PowerShell® のスケジュールされたジョブは、Windows PowerShell のジョブでもあり、タスク スケジューラのタスクでもあります。スケジュールされた各ジョブはタスク スケジューラに登録され、Microsoft .Net Framework Serialization XML 形式でディスクに保存されます。

スケジュールされたジョブを作成すると、Windows PowerShell はローカル コンピューター上の $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs ディレクトリにスケジュールされたジョブ用のディレクトリを作成します。ディレクトリ名は、ジョブ名と同じです。

次に、サンプルの ScheduledJobs ディレクトリを示します。

        PS C:\ps-test> dir $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 サブディレクトリが含まれています。

        PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob

        Directory:
        C:\Users\User1\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 ディレクトリには、実行履歴が含まれています。ジョブ トリガーがスケジュールされたジョブを開始するたびに、Windows PowerShell は Output ディレクトリにタイムスタンプを名前にしたディレクトリを作成します。タイムスタンプ ディレクトリには、Results.xml ファイルのジョブの結果および Status.xml ファイルのジョブ ステータスが含まれています。

次のコマンドは、スケジュールされたジョブ ProcessJob の実行履歴ディレクトリを表示します。

        PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob\Output

        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


        PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob\Output\20111102-030002-260

        Directory: C:\Users\juneb\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\testjob\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 が含まれている場合、Windows PowerShell はスケジュールされたジョブと、ジョブの結果も含めその実行履歴を削除します。

スケジュールされたジョブの即時開始

次の 2 つの方法のいずれかで、スケジュールされたジョブをすぐに開始できます。

  • -- Start-Job コマンドレットを実行して、スケジュールされたジョブを開始します。

  • -- Register-ScheduledJob コマンドに RunNow パラメーターを追加して、コマンドを実行したらすぐにジョブを開始します。

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

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

        Start-Job -DefinitionName ProcessJob

ジョブを管理し、ジョブの結果を取得するには、Job コマンドレットを使用します。Job コマンドレットの詳細については、「about_Jobs」(https://go.microsoft.com/fwlink/?LinkID=113251) を参照してください。

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

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

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

開始時刻と終了時刻の取得

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

次の例では、Format-Table コマンドレットの Property パラメーターを使用して、テーブルの各ジョブ インスタンスの PSBeginTime プロパティおよび PSEndTime プロパティを表示しています。このコマンドは、集計プロパティを使用して、各ジョブ インスタンスの経過時間を表示します。

      PS C:\> 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 プロパティの値を超えると、Windows PowerShell は最も古いインスタンスの結果を削除して、最新のインスタンスの結果を保存するための領域を確保します。

既定では、Windows PowerShell はスケジュールされたジョブごとに 32 個のインスタンスの実行履歴と結果を保存します。その値を変更するには、Register-ScheduledJob コマンドレットまたは Set-ScheduledJob コマンドレットの MaxResultCount パラメーターを使用します。

スケジュールされたジョブの実行履歴とすべての結果を削除するには、Set-ScheduledJob コマンドレットの ClearExecutionHistory パラメーターを使用します。この実行履歴を削除しても、Windows PowerShell はスケジュールされたジョブの新しいインスタンスの結果を引き続き保存します。ここにセクション本体を挿入してください。

次のコマンドは、Register-ScheduledJob コマンドレットを使用して、スケジュールされたジョブを作成します。このコマンドは、12 という値が指定された MaxResultCount パラメーターを使用して、スケジュールされたジョブの最新の 12 個のジョブ インスタンス結果のみを保存します。

        Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Process} -MaxResultCount 12

次のコマンドは、Set-ScheduledJob コマンドレットの MaxResultCount パラメーターを使用して、保存されるインスタンス結果の数を 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

about_Scheduled_Jobs_Troubleshooting

about_Jobs