Set-ScheduledJob

更改计划作业。

语法

Set-ScheduledJob
   [-Name <String>]
   [-ScriptBlock <ScriptBlock>]
   [-Trigger <ScheduledJobTrigger[]>]
   [-InitializationScript <ScriptBlock>]
   [-RunAs32]
   [-Credential <PSCredential>]
   [-Authentication <AuthenticationMechanism>]
   [-ScheduledJobOption <ScheduledJobOptions>]
   [-InputObject] <ScheduledJobDefinition>
   [-MaxResultCount <Int32>]
   [-PassThru]
   [-ArgumentList <Object[]>]
   [-RunNow]
   [-RunEvery <TimeSpan>]
   [<CommonParameters>]
Set-ScheduledJob
   [-Name <String>]
   [-FilePath <String>]
   [-Trigger <ScheduledJobTrigger[]>]
   [-InitializationScript <ScriptBlock>]
   [-RunAs32]
   [-Credential <PSCredential>]
   [-Authentication <AuthenticationMechanism>]
   [-ScheduledJobOption <ScheduledJobOptions>]
   [-InputObject] <ScheduledJobDefinition>
   [-MaxResultCount <Int32>]
   [-PassThru]
   [-ArgumentList <Object[]>]
   [-RunNow]
   [-RunEvery <TimeSpan>]
   [<CommonParameters>]
Set-ScheduledJob
   [-InputObject] <ScheduledJobDefinition>
   [-ClearExecutionHistory]
   [-PassThru]
   [<CommonParameters>]

说明

Set-ScheduledJob cmdlet 更改计划作业的属性,例如作业运行的命令或运行该作业时所需的凭据。 它还可用于清除计划作业的执行历史记录。

若要使用此 cmdlet,请首先使用 Get-ScheduledJob cmdlet 获取计划作业。 然后,通过管道将该计划作业传递给 Set-ScheduledJob 或将其保存在某个变量中,并使用 InputObject 参数来标识该作业。 使用 Set-ScheduledJob 的剩余参数,以更改作业属性或清除执行历史记录。

尽管你可以使用 Set-ScheduledJob 更改计划作业的触发器和选项,但 Add-JobTriggerSet-JobTriggerSet-ScheduledJobOption cmdlet 提供了简单得多的方法来完成这些任务。 若要创建新的计划作业,请使用 Register-ScheduledJob cmdlet。

Set-ScheduledJob 的 Trigger 参数添加一个或多个用于启动作业的作业触发器。 Trigger 参数是可选项,因此你可以在创建计划作业时添加触发器、稍后添加作业触发器、添加 RunNow 参数以立即启动作业、使用 Start-Job cmdlet 随时启动作业,或将未触发的计划作业保存为其他作业的模板。

Set-ScheduledJob 是 PSScheduledJob 模块(包含在 Windows PowerShell 中)中的一系列作业计划 cmdlet 之一。

有关计划作业的详细信息,请参阅 PSScheduledJob 模块中的“关于”主题。 导入 PSScheduledJob 模块,然后键入 Get-Help about_Scheduled*,或参阅 about_Scheduled_Jobs

此 cmdlet 是在 Windows PowerShell 3.0 中引入的。

示例

示例 1:更改作业运行的脚本

此示例显示了如何更改在计划作业中运行的脚本。

Get-ScheduledJob -Name "Inventory"

Id         Name            Triggers        Command                                  Enabled
--         ----            --------        -------                                  -------
1          Inventory       {1}             C:\Scripts\Get-Inventory.ps1             True

Get-ScheduledJob -Name "Inventory" | Set-ScheduledJob -FilePath "C:\Scripts\Get-FullInventory.ps1" -PassThru

Id         Name            Triggers        Command                                  Enabled
--         ----            --------        -------                                  -------
1          Inventory       {1}             C:\Scripts\Get-FullInventory.ps1         True

第一个命令使用 Get-ScheduledJob cmdlet 来获取 Inventory 计划作业。 此输出显示该作业运行 Get-Inventory.ps1 脚本。

第二个命令使用 Get-ScheduledJob cmdlet 来获取 Inventory 计划作业。 管道运算符 (|) 将计划作业发送到 Set-ScheduledJob cmdlet。 Set-ScheduledJob cmdlet 使用 Script 参数指定新脚本 Get-FullInventory.ps1。 此命令使用 PassThru 参数在更改后返回计划作业。

此命令不是必需的;包含它只是为了显示脚本更改的效果。

示例 2:删除计划作业的执行历史记录

此示例删除计划作业的当前执行历史记录以及保存的作业结果。

Get-ScheduledJob BackupArchive | Set-ScheduledJob -ClearExecutionHistory

此命令使用 Get-ScheduledJob cmdlet 来获取 BackupArchive 计划作业。 管道运算符 (|) 将该作业发送到 Set-ScheduledJob cmdlet 以更改它。 Set-ScheduledJob cmdlet 使用 ClearExecutionHistory 参数来删除执行历史记录和保存的结果。

有关计划作业的执行历史记录和保存的作业结果的详细信息,请参阅 about_Scheduled_Jobs

示例 3:更改远程计算机上的计划作业

此命令更改远程计算机上所有计划作业中的初始化脚本。

Invoke-Command -Computer "Server01, Server02" -ScriptBlock {Get-ScheduledJob |
    Set-ScheduledJob -InitializationScript \\SrvA\Scripts\SetForRun.ps1}

该命令使用 Invoke-Command cmdlet 在 Server01 和 Server02 计算机上运行命令。

远程命令以 Get-ScheduledJob 命令开始,后者可获取计算机上的所有计划作业。 通过管道将这些计划作业传递给 Set-ScheduledJob cmdlet,此 cmdlet 将初始化脚本更改为 SetForRun.ps1

参数

-ArgumentList

指定由 FilePath 参数指定的脚本的参数值,或者指定由 ScriptBlock 参数指定的命令的值。

类型:Object[]
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Authentication

指定用于对用户的凭据进行身份验证的机制。 此参数的可接受值为:

  • Default
  • Basic
  • Credssp
  • Digest
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

默认值为 Default。 有关此参数的值的详细信息,请参阅 PowerShell SDK 中的 AuthenticationMechanism 枚举

注意

在凭据安全支持提供程序 (CredSSP) 身份验证中,用户凭据传递到远程计算机中进行验证,这种验证用于要求对多个资源进行验证的命令(例如访问远程网络共享时使用的命令)。 此机制增加了远程操作的安全风险。 如果远程计算机的安全受到威胁,则传递给该计算机的凭据可用于控制网络会话。

类型:AuthenticationMechanism
接受的值:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-ClearExecutionHistory

删除计划作业的当前执行历史记录以及保存的结果。

作业执行历史记录和作业结果都将随计划作业一同保存在创建该作业的计算机上的 $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs 目录中。 若要查看执行历史记录,请使用 Get-Job cmdlet。 若要获取作业结果,请使用 Receive-Job cmdlet。

此参数不会影响任务计划程序写入 Windows 事件日志的事件,也不会阻止 Windows PowerShell 保存作业结果。 若要管理保存的作业结果数,请使用 MaxResultCount 参数。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Credential

指定有权运行计划作业的用户帐户。 默认为当前用户。

键入用户名,例如“User01”或“Domain01\User01”;或输入 PSCredential 对象,例如来自 Get-Credential cmdlet 的一个 PSCredential 对象。 如果仅输入用户名,则将提示你输入密码。

类型:PSCredential
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-FilePath

指定计划作业运行的脚本。 在本地计算机上输入指向 .ps1 文件的路径。 若要指定脚本参数的默认值,请使用 ArgumentList 参数。 每个计划作业都必须具有 ScriptBlock 或 FilePath 值。

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-InitializationScript

指定到 Windows PowerShell 脚本 (.ps1) 的完全限定的路径。 在会话中运行针对后台作业创建的初始化脚本,然后再运行由 ScriptBlock 参数指定的命令或由 FilePath 参数指定的脚本。 可使用初始化脚本配置会话,例如添加文件、函数或别名、创建目录或者检查必备项。

若要指定用于运行主要作业命令的脚本,请使用 FilePath 参数。

如果初始化脚本生成错误(包括非终止性错误),则计划作业的当前实例不会运行,其状态为“Failed”。

类型:ScriptBlock
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-InputObject

指定要更改的计划作业。 请输入包含 ScheduledJobDefinition 对象的变量,或者键入获取 ScheduledJobDefinition 对象的命令或表达式,例如 Get-ScheduledJob 命令。 还可以通过管道将 ScheduledJobDefinition 对象传递给 Set-ScheduledJob

如果指定多个计划作业,则 Set-ScheduledJob 将对所有作业做出相同的更改。

类型:ScheduledJobDefinition
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-MaxResultCount

指定为计划作业保留的作业结果项数。 默认值为 32。

Windows PowerShell 将计划作业的每个触发实例的执行历史记录和结果都保存在磁盘上。 此参数的值可确定为此计划作业保存的作业实例结果数。 当作业实例结果数超过此值时,Windows PowerShell 将删除最旧的作业实例结果,以便为最新的作业实例结果腾出空间。

作业执行历史记录和作业结果保存在 创建作业的计算机的 $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\<JobName>\Output\<Timestamp> 目录中。 若要查看执行历史记录,请使用 Get-Job cmdlet。 若要获取作业结果,请使用 Receive-Job cmdlet。

MaxResultCount 参数设置计划作业的 ExecutionHistoryLength 属性值。

若要删除当前执行历史记录和作业结果,请使用 ClearExecutionHistory 参数。

类型:Int32
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Name

为计划作业及其实例指定新名称。 该名称在本地计算机上必须唯一。

若要标识要更改的计划作业,请使用 InputObject 参数或通过管道将计划作业从 Get-ScheduledJob 传递到 Set-ScheduledJob

此参数不更改磁盘上作业实例的名称。 它仅影响在此命令完成后启动的作业实例。

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-PassThru

返回一个代表你所处理的项目的对象。 默认情况下,此 cmdlet 将不产生任何输出。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-RunAs32

在 32 位进程中运行计划作业。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-RunEvery

用于指定运行作业的频率。 例如,使用此选项每 15 分钟运行一次作业。

类型:TimeSpan
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-RunNow

在运行 Set-ScheduledJob cmdlet 后立即启动作业。 通过使用此参数,使得触发器任务计划程序无需在注册后立即运行 Windows PowerShell 脚本,而且用户无需创建可指定启动日期和时间的触发器。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-ScheduledJobOption

设置计划作业的选项。 输入 ScheduledJobOptions 对象(例如使用 New-ScheduledJobOption cmdlet 创建的对象)或哈希表值。

你可以在注册计划作业时设置该计划作业的选项,或使用 Set-ScheduledJobOptionSet-ScheduledJob cmdlet 来设置或更改选项。

许多选项及其默认值都可确定是否运行计划作业以及运行时间。 在计划某个作业之前,务必检查这些选项。 有关计划作业选项(包括默认值)的说明,请参阅 New-ScheduledJobOption

若要提交哈希表,请使用以下键。 在下列哈希表中,这些键与其默认值一起显示。

@{# Power SettingsStartIfOnBattery=$False;StopIfGoingOnBattery=$True; WakeToRun=$False; # Idle SettingsStartIfNotIdle=$False; IdleDuration="00:10:00"; IdleTimeout="01:00:00"; StopIfGoingOffIdle=$True; RestartOnIdleResume=$False;# Security settingsShowInTaskScheduler=$TrueRunElevated=$False;# MiscRunWithoutNetwork=$False;DoNotAllowDemandStart=$False;MultipleInstancePolicy=IgnoreNew# Can be IgnoreNew, Parallel, Queue, StopExisting}

类型:ScheduledJobOptions
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-ScriptBlock

指定计划作业运行的命令。 将命令括在大括号 ({}) 中以创建脚本块。 若要指定命令参数的默认值,请使用 ArgumentList 参数。

每个 Register-ScheduledJob 命令都必须使用 ScriptBlock 或 FilePath 参数

类型:ScriptBlock
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Trigger

指定计划作业的触发器。 输入一个或多个 ScheduledJobTrigger 对象(例如 New-JobTrigger cmdlet 返回的对象),或者输入作业触发器键值的哈希表。

作业触发器可以根据一次性计划或重复计划自动启动计划作业,或者在事件发生时这样做。

作业触发器是可选的。 可以在创建计划作业时添加触发器、使用 Add-JobTriggerSet-ScheduledJob cmdlet 在以后添加触发器,或使用 Start-Job cmdlet 立即启动计划作业。 你还可以创建和保留没有作业触发器的计划作业。

若要提交哈希表,请使用以下键。

@{Frequency="Once" (or Daily, Weekly, AtStartup, AtLogon);At="3am"(或任何有效的时间字符串);DaysOfWeek="Monday", "Wednesday"(或任意组合的星期名称);Interval=2(或任何有效的频率间隔);RandomDelay="30minutes"(或任何有效的时间跨度字符串);User="Domain1\User01"(或任何有效用户;仅与 AtLogon 频率值一起使用)

}

类型:ScheduledJobTrigger[]
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

输入

ScheduledJobDefinition

可以通过管道将计划作业传递给此 cmdlet。

输出

None

默认情况下,此 cmdlet 不返回任何输出。

ScheduledJobDefinition

使用 PassThru 参数时,此 cmdlet 会返回其更改的计划作业。