Set-JobTrigger

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

语法

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 模块(包含在 Windows PowerShell 中)中的一系列作业计划 cmdlet 之一。

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

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

示例

示例 1:更改作业触发器中的星期几名称

此示例显示了如何更改每周作业触发器中的星期几名称。

Get-JobTrigger -Name "DeployPackage"

Id         Frequency       Time                   DaysOfWeek              Enabled
--         ---------       ----                   ----------              -------
1          Weekly          9/29/2011 12:00:00 AM  {Wednesday, Saturday}   True

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 计划作业的作业触发器。 该输出显示触发器在星期三和星期六的午夜启动作业。

第二个命令使用 Get-JobTrigger cmdlet 获取 DeployPackage 计划作业的作业触发器。 管道运算符 (|) 将该触发器发送到 Set-JobTrigger cmdlet,此 cmdlet 将更改该作业触发器,以便可在星期三和星期天启动 DeployPackage 作业。 该命令使用 PassThru 参数在更改后返回触发器。

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

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

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

Get-JobTrigger -Name "Inventory"

Id         Frequency       Time                   DaysOfWeek              Enabled
--         ---------       ----                   ----------              -------
1          Daily           9/27/2011 11:00:00 PM                          True
2          AtStartup                                                      True

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

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

第二个命令使用 Get-JobTrigger cmdlet 获取 Inventory 作业的 AtStartup 作业触发器。 此命令使用 TriggerID 参数来标识该作业触发器。 管道运算符 (|) 将该作业触发器发送到 Set-JobTrigger cmdlet,此 cmdlet 将该触发器更改为在每四个星期的星期一午夜运行的每周作业触发器。 该命令使用 PassThru 参数在更改后返回触发器。

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

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

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:更改许多作业触发器中的一个

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

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

Get-JobTrigger -Name "SecurityCheck" -TriggerId 3 | Set-JobTrigger -RepetitionInterval (New-TimeSpan -Minutes 90)
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 计划作业的 Once 作业触发器的重复间隔时间从每 60 分钟更改为每 90 分钟。 SecurityCheck 计划作业具有三个作业触发器,因此该命令使用 Get-JobTrigger cmdlet 的 TriggerId 参数标识所更改的作业触发器。

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

第二个命令使用 Get-JobTrigger cmdlet 的 TriggerID 参数来获取 SecurityCheck 计划作业的 Once 触发器。 此命令通过管道将触发器发送给 Format-List cmdlet,此 cmdlet 显示 Once 作业触发器的所有属性。 该输出显示,触发器每 4 小时启动作业一次(RepetitionInterval 为 1 小时)且持续时间为一天(RepetitionDuration 为 1 天)。

第三个命令将作业触发器的重复间隔时间从 1 小时更改为 90 分钟。 该命令不返回任何输出。

第四个命令显示变更的影响。该输出显示,触发器每 90 分钟启动作业一次(RepetitionInterval 为 1 小时 30 分钟)且持续时间为一天(RepetitionDuration 为 1 天)。

参数

-At

在指定的日期和时间启动作业。 输入一个 DateTime 对象,例如 Get-Date cmdlet 返回的对象,或者输入一个可转换为时间的字符串,例如 April 19, 2012 15:0012/31/2013 9:00 PM3am

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

使用 Once 参数时,将 At 参数值设置为特定的日期和时间。 由于 DateTime 对象中的默认日期为当前日期,因此在没有显式日期的情况下设置当前时间之前的某个时间时,将针对过去的某个时间生成作业触发器。

DateTime 对象以及可转换为 DateTime 对象的字符串将自动调整为与在“控制面板”的“区域和语言”中为本地计算机选择的日期和时间格式兼容。

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

-AtLogOn

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

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

-AtStartup

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

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

-Daily

指定一个循环的每日作业计划。 使用 Daily 参数集中的其他参数来指定计划详细信息。

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

-DaysInterval

指定启动每日计划之间间隔的天数。 例如,值为 3 时将在第 1 天、第 4 天、第 7 天(依此类推)启动计划作业。 默认值为 1

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

-DaysOfWeek

指定在星期几运行每周计划作业。 输入星期几名称(例如 MondayThursday)、整数 0-6(其中 0 表示星期天)或者输入一个星号 (*) 来表示每一天。 在 Weekly 参数集中需要此参数。

在作业触发器中,应将星期几名称转换为其对应的整数值。 在某个命令中将星期名称引在引号中时,应单独将每个星期名称引在引号中,例如 "Monday", "Tuesday"。 如果将多个星期几名称括在一对引号中,则应合计相应的整数值。 例如,"Monday, Tuesday" (1 + 2) 会导致 Wednesday 值 (3)。

类型:DayOfWeek[]
接受的值:Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-InputObject

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

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

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

-Once

指定非循环(一次性)计划。

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

-PassThru

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

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

-RandomDelay

启用从计划开始时间开始的随机延迟,并设置最大延迟值。 针对每次启动以伪随机地方式设置延迟的长度,该长度可从无延迟变化到由此参数值指定的时间。 默认值为零 (00:00:00),表示禁用随机延迟。

输入一个时间跨度对象(例如 New-TimeSpan cmdlet 返回的对象),或输入采用 <hours>:<minutes>:<seconds> 格式的值(会自动转换为时间跨度对象)。

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

-RepeatIndefinitely

使用此参数(从 Windows PowerShell 4.0 开始提供),无需为 RepetitionDuration 参数指定 TimeSpan.MaxValue 值即可无限期地重复运行计划作业。

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

-RepetitionDuration

重复运行该作业,直到指定时间到期为止。 重复频率由 RepetitionInterval 参数值确定。 例如,如果 RepetitionInterval 的值为 5 分钟且 RepetitionDuration 的值为 2 小时,将在两小时内每 5 分钟触发一次该作业。

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

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

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

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

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

-RepetitionInterval

在指定的时间间隔重复运行作业。 例如,如果此参数的值是 2 小时,则将每隔两小时触发该作业一次。 默认值为 0,表示不重复该作业。

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

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

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

-User

指定可触发计划作业启动 AtLogon 的用户。 按 <UserName><Domain>\<Username> 格式输入用户名,或者输入一个星号 (*) 来表示所有用户。 默认值为所有用户。

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

-Weekly

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

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

-WeeksInterval

指定启动每周作业计划之间间隔的天数。 例如,值为 3 时将在第 1 周、第 4 周、第 7 周(依此类推)启动计划作业。 默认值为 1

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

输入

ScheduledJobTrigger

你可以通过管道将作业触发器传递给此 cmdlet。

输出

None

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

ScheduledJobTrigger

当使用 PassThru 参数时,此 cmdlet 返回它已更改的作业触发器。

备注

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