about_Scheduled_Jobs

应用到: Windows PowerShell 3.0, Windows PowerShell 4.0

主题

about_Scheduled_Jobs

简短说明

介绍计划作业并说明如何在 Windows PowerShell® 和任务计划程序中使用和管理计划作业。

详细说明

Windows PowerShell 计划作业是 Windows PowerShell 后台作业和“任务计划程序”任务的有用结合。

与 Windows PowerShell 后台作业一样,计划作业以异步方式在后台运行。可以通过使用作业 cmdlet(比如 Start-Job、Get-Job、Stop-Job 和 Receive-Job)管理已经运行的计划作业的实例。

与任务计划程序任务一样,计划作业被保存至磁盘。你可以在任务计划程序中查看和管理作业、根据需要启用和禁用它们、将它们作为模板运行或使用、建立用于启动作业的一次性或循环的计划,或设置作业启动的条件。

此外,计划作业实例的结果以易于访问的格式保存至磁盘,从而提供了作业输出的运行日志。计划作业还附带用于管理它们的一组自定义 cmdlet。这些 cmdlet 使你能够创建、编辑、管理、禁用和重新启用计划作业、作业触发器和作业选项。

这组功能全面和灵活的工具使计划作业成为许多专业 Windows PowerShell IT 解决方案的重要组成要素。

计划作业 cmdlet 包含在随 Windows PowerShell 一起安装的 PSScheduledJob 模块中。此模块在 Windows PowerShell 3.0 中引入,并在 Windows PowerShell 3.0 和 Windows PowerShell 的更高版本中发挥作用。

有关 Windows PowerShell 后台作业的详细信息,请参阅 About_Jobs (https://go.microsoft.com/fwlink/?LinkID=113251)。

有关任务计划程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkId=232928,参阅 TechNet 库中的“任务计划程序”。

注意:你可以在任务计划程序中查看和管理 Windows PowerShell 计划作业,但 Windows PowerShell 作业和计划作业 cmdlet 仅适用于在 Windows PowerShell 中创建的计划作业。

计划作业 CMDLET

PSScheduledJob 模块包含以下 cmdlet。

    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:00 AM 启动并运行 Get-Process cmdlet。即使计算机使用电池运行,该作业也会启动。

        $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 cmdlet 的 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 cmdlet 获取目前为止已经运行的 ProcessJob 计划作业的所有实例。仅当 PSScheduledJob 模块导入当前会话时,Get-Job cmdlet 才获取计划作业。

提示:请注意,你使用 ScheduledJob cmdlet 管理计划作业,但你使用 Job cmdlet 管理计划作业的实例。

        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 cmdlet 的 DefinitionName 参数启动 ProcessJob 计划作业。

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

         PS C:\>Start-Job -DefinitionName ProcessJob

以下命令删除 ProcessJob 计划作业以及所保存的其所有作业实例的结果。

        PS C:\> Remove-ScheduledJob ProcessJob

计划作业概念

“计划作业”运行命令或脚本。计划作业可以包括用于启动该作业的“作业触发器”和用于设置运行该作业的条件的“作业选项”。

“作业触发器”自动启动计划作业。作业触发器可以包括一次性或循环的计划,或指定一个事件,例如在用户进行登录或 Windows 启动时。计划作业可以具有一个或多个作业触发器,并且你可以创建、添加、启用、禁用和获取作业触发器。

作业触发器是可选的。你也可以通过使用 Start-Job cmdlet,或通过将 RunNow 参数添加到你的 Register-ScheduledJob 命令来立即启动计划作业。

“作业选项”设置运行计划作业的条件。每个计划作业具有一个作业选项对象。你可以创建和编辑作业选项对象,并将其添加到一个或多个计划作业中。

每次计划作业启动时,都会创建一个“作业实例”。使用 Windows PowerShell Job cmdlet 查看和管理作业实例。

计划作业被保存至本地计算机上的 $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs 目录中的 XML 文件中的磁盘中(因此也就是 Cmdlet 谓词、“注册”,而不是“新建”)。

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