Set-JobTrigger

更改计划作业的作业触发器。

语法

Default (默认值)

Set-JobTrigger
    [-InputObject] <ScheduledJobTrigger[]>
    [-DaysInterval <Int32>]
    [-WeeksInterval <Int32>]
    [-RandomDelay <TimeSpan>]
    [-At <DateTime>]
    [-User <String>]
    [-DaysOfWeek <DayOfWeek[]>]
    [-AtStartup]
    [-AtLogOn]
    [-Once]
    [-RepetitionInterval <TimeSpan>]
    [-RepetitionDuration <TimeSpan>]
    [-RepeatIndefinitely]
    [-Daily]
    [-Weekly]
    [-PassThru]
    [<CommonParameters>]

说明

Set-JobTrigger cmdlet 更改计划作业的作业触发器的属性。 可以使用它更改作业启动的时间或频率,或者从基于时间的计划更改为由登录或启动触发的计划。

作业触发器定义用于启动计划作业的定期计划或条件。 虽然作业触发器未保存到磁盘,但可以更改已保存到磁盘的计划作业的作业触发器。

若要更改计划作业的作业触发器,请首先使用 Get-JobTrigger cmdlet 获取计划作业的作业触发器。 然后,通过管道将触发器传递给 Set-JobTrigger 或将触发器保存在变量中,并使用 Set-JobTrigger cmdlet 的 InputObject 参数来标识触发器。 使用 set-JobTrigger 的剩余参数更改作业触发器。

更改作业触发器的类型(例如将作业触发器从每日或每周触发器更改为 AtLogon 触发器),将删除原始触发器属性。 但是,如果更改触发器的值,但不更改其类型,例如更改每周触发器中的天数,则只会更改指定的属性。 保留原始作业触发器的所有其他属性。

Set-JobTrigger 是 PSScheduledJob 模块中包含的作业计划 cmdlet 集合之一。

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

此 cmdlet 已在 Windows PowerShell 3.0 中引入。

示例

示例 1:更改作业触发器中的天数

PS C:\> Get-JobTrigger -Name "DeployPackage"
Id         Frequency       Time                   DaysOfWeek              Enabled
--         ---------       ----                   ----------              -------
1          Weekly          9/29/2011 12:00:00 AM  {Wednesday, Saturday}   True

The second command uses the Get-JobTrigger cmdlet to get the job trigger of the DeployPackage scheduled job. A pipeline operator (|) sends the trigger to the **Set-JobTrigger** cmdlet, which changes the job trigger so that it starts the DeployPackage job on Wednesdays and Sundays. The command uses the *Passthru* parameter to return the trigger after the change.
PS C:\> Get-JobTrigger -Name "DeployPackage" | Set-JobTrigger -DaysOfWeek "Wednesday", "Sunday" -Passthru
Id         Frequency       Time                   DaysOfWeek              Enabled
--         ---------       ----                   ----------              -------
1          Weekly          9/29/2011 12:00:00 AM  {Wednesday, Sunday}     True

此示例演示如何更改每周作业触发器中的天数。

第一个命令使用 Get-JobTrigger cmdlet 来获取 DeployPackage 计划作业的作业触发器。 该输出显示触发器在星期三和星期六的午夜启动作业。

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

示例 2:更改作业触发器类型

PS C:\> Get-JobTrigger -Name "Inventory"
Id         Frequency       Time                   DaysOfWeek              Enabled
--         ---------       ----                   ----------              -------
1          Daily           9/27/2011 11:00:00 PM                          True
2          AtStartup                                                      True

The second command uses the **Get-JobTrigger** cmdlet to get the *AtStartup* job trigger of the Inventory job. The command uses the *TriggerID* parameter to identify the job trigger. A pipeline operator (|) sends the job trigger to the **Set-JobTrigger** cmdlet, which changes it to a weekly job trigger that runs every four weeks on Monday at midnight. The command uses the *Passthru* parameter to return the trigger after the change.
PS C:\> Get-JobTrigger -Name "Inventory" -TriggerID 2 | Set-JobTrigger -Weekly -WeeksInterval 4 -DaysOfWeek Monday -At "12:00 AM"
Id         Frequency       Time                   DaysOfWeek              Enabled
--         ---------       ----                   ----------              -------
1          Daily           9/27/2011 11:00:00 PM                          True
2          Weekly          10/31/2011 12:00:00 AM {Monday}                True

此示例演示如何更改启动作业的作业触发器的类型。 此示例中的命令将 AtStartup 作业触发器替换为每周触发器。

第一个命令使用 Get-JobTrigger cmdlet 获取清单计划作业的作业触发器。 该输出显示该作业有两个触发器,即每日触发器和 AtStartup 触发器。

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

示例 3:更改远程作业触发器上的用户

PS C:\> Invoke-Command -ComputerName "Server01" -ScriptBlock {Get-ScheduledJob | Get-JobTrigger | Where-Object {$_.User} | Set-JobTrigger -User "Domain01/Admin02"}

此命令更改在 Server01 计算机上计划作业的所有 AtLogon 作业触发器中的用户。

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

远程命令以获取计算机上的所有计划作业的 Get-ScheduledJob 命令开头。 计划作业通过管道传递给 Get-JobTrigger cmdlet,该 cmdlet 获取计划作业的作业触发器。 每个作业触发器都包含一个包含计划作业的 JobDefinition 属性,因此即使更改了计划作业,触发器也保持与计划作业的关联。

作业触发器通过管道传输到 Where-Object cmdlet,该 cmdlet 获取具有 User 属性的作业触发器。 选定的作业触发器通过管道传递给 Set-JobTrigger cmdlet,该 cmdlet 会将用户更改为 Domain01\Admin02。

示例 4:更改多个作业触发器之一

PS C:\> Get-JobTrigger -Name "SecurityCheck"
Id         Frequency       Time                   DaysOfWeek              Enabled
--         ---------       ----                   ----------              -------
1          Daily           4/24/2013 3:00:00 AM                           True
2          Weekly          4/24/2013 4:00:00 PM   {Sunday}                True
3          Once            4/24/2013 4:00:00 PM                           True

The second command uses the **TriggerID** parameter of the **Get-JobTrigger** cmdlet to get the *Once* trigger of the SecurityCheck scheduled job. The command pipes the trigger to the Format-List cmdlet, which displays all of the properties of the *Once* job trigger.The output shows that the trigger starts the job once every hour (RepetitionInterval = 1 hour) for one day (RepetitionDuration = 1 day).
PS C:\> Get-JobTrigger -Name "SecurityCheck" -TriggerID 3 | Format-List -Property *
At                 : 4/24/2012 4:00:00 PM
DaysOfWeek         :
Interval           : 1
Frequency          : Once
RandomDelay        : 00:00:00
RepetitionInterval : 01:00:00
RepetitionDuration : 1.00:00:00
User               :
Id                 : 3
Enabled            : True
JobDefinition      : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition

The third command changes the repetition interval of the job trigger from one hour to 90 minutes. The command does not return any output.
PS C:\> Get-JobTrigger -Name "SecurityCheck" -TriggerId 3 | Set-JobTrigger -RepetitionInterval (New-TimeSpan -Minutes 90)

The fourth command displays the effect of the change.The output shows that the trigger starts the job once every 90 minutes (RepetitionInterval = 1 hour, 30 minutes) for one day (RepetitionDuration = 1 day).
PS C:\> Get-JobTrigger -Name "SecurityCheck" -TriggerID 3 | Format-List -Property *
At                 : 4/24/2012 4:00:00 PM
DaysOfWeek         :
Interval           : 1
Frequency          : Once
RandomDelay        : 00:00:00
RepetitionInterval : 01:30:00
RepetitionDuration : 1.00:00:00
User               :
Id                 : 3
Enabled            : True
JobDefinition      : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition

此示例中的命令将 SecurityCheck 计划作业的 一次作业触发器的重复间隔从每 60 分钟更改为每 90 分钟一次。 SecurityCheck 计划作业具有三个作业触发器,因此命令使用 Get-JobTrigger cmdlet 的 TriggerId 参数来标识正在更改的作业触发器。

第一个命令使用 Get-JobTrigger cmdlet 获取 SecurityCheck 计划作业的所有作业触发器。 显示任务触发器 ID 的输出显示 Once 任务触发器的 ID 为 3。

参数

-At

在指定的日期和时间启动作业。 输入 DateTime 对象,例如 Get-Date cmdlet 返回的对象,或可转换为时间的字符串,例如“2012 年 4 月 19 日 15:00”、“2013/12/31 下午 9:00”或“3am”。

如果未指定 DateTime 对象的元素(例如秒),则将不会更改作业触发器中的此元素。 如果原始作业触发器中没有包含 DateTime 对象,并且省略了某个元素,则将使用当前日期和时间中的相应元素来创建作业触发器。

使用 Once 参数时,请将 At 参数的值设置为特定的日期和时间。 由于 DateTime 对象中的默认日期是当前日期,因此设置当前时间之前的时间,而不显示日期会导致过去一段时间内的作业触发器。

DateTime 对象以及转换为 DateTime 对象的字符串会自动调整为与控制面板中本地计算机选择的日期和时间格式兼容。

参数属性

类型:DateTime
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-AtLogOn

当指定的用户登录到计算机时启动计划作业。 若要指定用户,请使用 User 参数。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-AtStartup

在 Windows 启动时启动计划作业。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Daily

指定定期每日作业计划。 使用 Daily 参数集中的其他参数指定计划详细信息。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-DaysInterval

指定每日计划发生之间的天数。 例如,值 3 在 1、4、7 等天启动计划作业。 默认值为 1。

参数属性

类型:Int32
默认值:1
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-DaysOfWeek

指定每周计划作业运行的一周中的天数。 输入日期名称,例如 Monday、Thursday、整数 0-6(其中 0 表示星期日)或星号 (*) 表示每天。 “每周”参数集中需要此参数。

日期名称将转换为作业触发器中的整数值。 在命令中用引号将日名称括起来时,将每天的名称括在单独的引号中,例如“Monday”、“Tuesday”。 如果将多天名称括在单引号对中,则将相应的整数值求和。 例如,“星期一,星期二”(1,2)结果值为“Wednesday”(3)。

参数属性

类型:

DayOfWeek[]

默认值:None
接受的值:Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-InputObject

指定作业触发器。 输入一个变量,其中包含 ScheduledJobTrigger 对象或键入 ScheduledJobTrigger 对象(如 Get-JobTrigger 命令)的命令或表达式。 还可以通过管道将 ScheduledJobTrigger 对象传递给 Set-JobTrigger

如果指定多个作业触发器,Set-JobTrigger 对所有作业触发器进行相同的更改。

参数属性

类型:

ScheduledJobTrigger[]

默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:0
必需:True
来自管道的值:True
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Once

指定非定期(一次)计划。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-PassThru

返回已更改的作业触发器。 默认情况下,此 cmdlet 不生成任何输出。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-RandomDelay

启用在计划开始时间开始的随机延迟,并设置最大延迟值。 延迟的长度是针对每个开始的伪随机设置的,从不延迟到此参数的值指定的时间不等。 默认值零(00:00:00),将禁用随机延迟。

输入时间跨度对象(例如由 New-TimeSpan cmdlet 返回的一个),或者以 <小时>:<分钟>:<秒> 格式输入值,该格式会自动转换为时间跨度对象。

参数属性

类型:TimeSpan
默认值:00:00:00
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-RepeatIndefinitely

此参数从 Windows PowerShell 4.0 开始提供,无需为 RepetitionDuration 参数指定 TimeSpan.MaxValue 值,从而在无限期内重复运行计划作业。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-RepetitionDuration

重复作业,直到指定的时间过期。 重复频率由 RepetitionInterval 参数的值确定。 例如,如果 RepetitionInterval 的值为 5 分钟,并且 RepetitionDuration 的值为 2 小时,则作业每 5 分钟触发一次两小时。

输入时间跨度对象,例如 New-TimeSpan cmdlet 返回的对象或可转换为时间跨度对象的字符串,例如“1:05:30”。

若要无限期运行作业,请改为添加 RepeatIndefinitely 参数。

若要在作业触发器重复持续时间过期之前停止作业,请将 RepetitionDuration 值设置为零(0)。

若要更改 作业触发器的重复持续时间或重复间隔,该命令必须同时包括 RepetitionIntervalRepetitionDuration 参数。 若要更改其他类型的作业触发器的重复持续时间或重复间隔,该命令必须包括 OnceAtRepetitionIntervalRepetitionDuration 参数。

参数属性

类型:TimeSpan
默认值:0
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-RepetitionInterval

按指定的时间间隔重复作业。 例如,如果此参数的值为 2 小时,则每隔两小时触发一次作业。 默认值 0 不重复作业。

输入时间跨度对象,例如 New-TimeSpan cmdlet 返回的对象或可转换为时间跨度对象的字符串,例如“1:05:30”。

若要更改 作业触发器的重复持续时间或重复间隔,该命令必须同时包括 RepetitionIntervalRepetitionDuration 参数。 若要更改其他类型的作业触发器的重复持续时间或重复间隔,该命令必须包括 OnceAtRepetitionIntervalRepetitionDuration 参数。

参数属性

类型:TimeSpan
默认值:0
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-User

指定触发 AtLogon 计划作业开始的用户。 以 <UserName> 或 <Domain\Username> 格式输入用户的名称,或输入星号 • 表示所有用户。 默认值为所有用户。

参数属性

类型:String
默认值:All users
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Weekly

指定定期每周作业计划。 使用 Weekly 参数集中的其他参数来指定计划详细信息。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-WeeksInterval

指定每周作业计划发生之间的周数。 例如,值 3 会在第 1 周、4、7 等周启动计划作业。 默认值为 1。

参数属性

类型:Int32
默认值:1
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

CommonParameters

此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters

输入

ScheduledJobTrigger

您可以通过管道将多个作业触发器传递给 Set-JobTrigger

输出

None or Microsoft.PowerShell.ScheduledJob.ScheduledJobTrigger

使用 Passthru 参数时,Set-JobTrigger 返回已更改的作业触发器。 否则,此 cmdlet 不会生成任何输出。

备注

  • 作业触发器具有 JobDefintion 属性,用于将其与计划的作业相关联。 更改计划作业的作业触发器时,作业将发生更改。 无需使用 Set-ScheduledJob 命令将更改的触发器应用于计划作业。