about_Scheduled_Jobs_Advanced

应用到: Windows PowerShell 3.0, Windows PowerShell 4.0

主题

about_Scheduled_Jobs_Advanced

简短说明

说明高级计划作业主题,包括构成计划作业的基础的文件结构。

详细说明

本主题包括以下部分:

  • -- 计划作业目录和文件

  • -- 重命名计划作业

  • -- 立即启动计划作业

  • -- 管理执行历史记录

计划作业目录和文件

Windows PowerShell® 计划作业既是 Windows PowerShell 作业,也是任务计划程序任务。每个计划作业都在任务计划程序中注册并以 Microsoft .Net Framework 序列化 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 cmdlet 来解析文件。

警告:不要编辑 XML 文件。如果任何 XML 文件包含无效的 XML,Windows PowerShell 将删除计划作业及其执行历史记录,包括作业结果。

立即启动计划作业

你可以采用两种方式之一立即启动计划作业:

  • -- 运行 Start-Job cmdlet 以启动任何计划作业

  • -- 将 RunNow 参数添加到 Register-ScheduledJob 命令,以在运行命令时立即启动作业

通过使用 Start-Job cmdlet 启动的作业是标准 Windows PowerShell 后台作业,不是计划作业的实例。和所有后台作业一样,这些作业将立即启动(它们不遵循作业选项,也不受作业触发器影响),并且它们的输出不保存在计划作业目录的 Output 目录中。

以下命令使用 Start-Job cmdlet 的 DefinitionName 参数启动 ProcessJob 计划作业。

        Start-Job -DefinitionName ProcessJob

若要管理作业并获取作业结果,请使用 Job cmdlet。有关 Job cmdlet 的详细信息,请参阅 about_Jobs (https://go.microsoft.com/fwlink/?LinkID=113251)。

注意:若要在计划作业的实例上使用 Job cmdlet,PSScheduledJob 模块必须导入到会话中。若要导入 PSScheduledJob 模块,请键入“Import-module PSScheduledJob”(不带引号)或使用任何 Scheduled Job cmdlet,如 Get-ScheduledJob。

重命名计划作业

若要重命名计划作业,请使用 Set-ScheduledJob cmdlet 的 Name 参数。当你重命名计划作业时,Windows PowerShell 将更改计划作业的名称和计划作业目录。但是,它不会更改已经运行的计划作业的实例名称。

获取开始和结束时间

若要获取该作业实例开始和结束的时间,请使用 Get-Job 为计划作业返回的 ScheduledJob 对象的 PSBeginTime 和 PSEndTime 属性。

以下示例使用 Format-Table cmdlet 的 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 cmdlet 的 MaxResultCount 参数。

若要删除计划作业的执行历史记录和所有结果,请使用 Set-ScheduledJob cmdlet 的 ClearExecutionHistory 参数。删除此执行历史记录不会阻止 Windows PowerShell 保存计划作业的新实例的结果。请在此处插入部分正文。

以下命令使用 Register-ScheduledJob cmdlet 创建计划作业。该命令使用值为 12 的 MaxResultCount 参数,仅保存计划作业的 12 个最新的作业实例结果。

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

以下命令使用 Set-ScheduledJob cmdlet 的 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