Register-ScheduledJob
创建计划作业。
语法
ScriptBlock (默认值)
Register-ScheduledJob
[-ScriptBlock] <ScriptBlock>
[-Name] <String>
[-Trigger <ScheduledJobTrigger[]>]
[-InitializationScript <ScriptBlock>]
[-RunAs32]
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[-ScheduledJobOption <ScheduledJobOptions>]
[-ArgumentList <Object[]>]
[-MaxResultCount <Int32>]
[-RunNow]
[-RunEvery <TimeSpan>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
FilePath
Register-ScheduledJob
[-FilePath] <String>
[-Name] <String>
[-Trigger <ScheduledJobTrigger[]>]
[-InitializationScript <ScriptBlock>]
[-RunAs32]
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[-ScheduledJobOption <ScheduledJobOptions>]
[-ArgumentList <Object[]>]
[-MaxResultCount <Int32>]
[-RunNow]
[-RunEvery <TimeSpan>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
说明
Register-ScheduledJob cmdlet 在本地计算机上创建计划作业。
计划作业是 Windows PowerShell 后台作业,可按一次性或定期计划自动启动。 计划作业存储在磁盘上并在任务计划程序中注册,因此可以在任务计划程序中或使用 Windows PowerShell 中的计划作业 cmdlet 进行管理。
计划作业启动时,它会创建计划作业的实例。 计划作业实例与 Windows PowerShell 后台作业相同,只是结果保存在磁盘上。 使用作业 cmdlet(如 Start-Job、Get-Job 和 Receive-Job)启动、查看和获取作业实例的结果。
使用 Register-ScheduledJob 创建新的计划作业。 若要指定计划作业运行的命令,请使用 ScriptBlock 参数;若要指定作业运行的脚本,请使用 FilePath 参数。
Windows PowerShell 计划的作业使用相同的作业触发器和任务计划程序用于计划任务的作业选项。
Register-ScheduledJobTrigger 参数添加一个或多个启动作业的作业触发器。 触发器 参数是可选的,因此可以在创建计划作业时添加触发器,稍后添加作业触发器,添加 RunNow 参数以立即启动作业,使用 Start-Job cmdlet 随时启动作业,或将未触发的计划作业保存为其他作业的模板。
Options 参数允许自定义计划作业的选项设置。 Options 参数也是可选的,因此可以在创建计划作业或更改作业时设置作业选项。 由于作业选项设置可以阻止计划作业运行,因此请查看作业选项并仔细设置它们。
Register-ScheduledJob 是 PSScheduledJob 模块中包含的作业计划 cmdlet 集合之一。
有关计划作业的详细信息,请参阅 PSScheduledJob 模块中的“关于”主题。
导入 PSScheduledJob 模块,然后键入:Get-Help about_Scheduled* 或查看about_Scheduled_Jobs。
此 cmdlet 已在 Windows PowerShell 3.0 中引入。
示例
示例 1:创建计划作业
PS C:\> Register-ScheduledJob -Name "Archive-Scripts" -ScriptBlock { dir $home\*.ps1 -Recurse | Copy-Item -Destination "\\Server\Share\PSScriptArchive" }
此命令将创建 Archive-Scripts 计划作业。 ScriptBlock 参数值包含一个命令,该命令以递归方式搜索$home目录以获取 .ps1 文件,并将其复制到文件共享中的目录。
由于计划作业不包含触发器,因此它不会自动启动。 稍后可以使用添加作业触发器,使用 Start-Job cmdlet 按需启动作业,或使用计划作业作为其他计划作业的模板。
示例 2:使用触发器和自定义选项创建计划作业
The first command uses the New-ScheduledJobOption cmdlet to create a job option object, which it saves in the $O parameter. The options start the scheduled job even if the computer is not idle, wake the computer to run the job, if necessary, and allows multiple instances of the job to run in a series.
PS C:\> $O = New-ScheduledJobOption -WakeToRun -StartIfNotIdle -MultipleInstancesPolicy Queue
The second command uses the New-JobTrigger cmdlet to create job trigger that starts a job every other Monday at 9:00 PM.
PS C:\> $T = New-JobTrigger -Weekly -At "9:00 PM" -DaysOfWeek Monday -WeeksInterval 2
This command creates the UpdateVersion scheduled job, which runs the UpdateVersion.ps1 script every Monday at 9:00 p.m. The command uses the *FilePath* parameter to specify the script that the job runs. It uses the *Trigger* parameter to specify the job triggers in the $T variable and the *ScheduledJobOption* parameter to specify the option object in the $O variable.
PS C:\> Register-ScheduledJob -Name "UpdateVersion" -FilePath "\\Srv01\Scripts\UpdateVersion.ps1" -Trigger $T -ScheduledJobOption $O
此示例演示如何创建具有作业触发器和自定义作业选项的计划作业。
示例 3:使用哈希表指定触发器和作业选项
PS C:\> Register-ScheduledJob -FilePath "\\Srv01\Scripts\Update-Version.ps1" -Trigger @{Frequency=Weekly; At="9:00PM"; DaysOfWeek="Monday"; Interval=2} -ScheduledJobOption @{WakeToRun; StartIfNotIdle; MultipleInstancesPolicy="Queue"}
此命令与示例 2 中的命令的效果相同。 它创建计划作业,但它使用哈希表来指定 触发器 和 ScheduledJobOption 参数的值。
示例 4:在远程计算机上创建计划作业
PS C:\> Invoke-Command -ComputerName (Get-Content Servers.txt) -ScriptBlock {Register-ScheduledJob -Name "Get-EnergyData" -FilePath "\\Srv01\Scripts\Get-EnergyData.ps1" -ScheduledJobOption $O -Trigger $T } -Credential $Cred
此命令在多个远程计算机上创建 EnergyData 计划作业。 计划作业运行一个脚本,该脚本收集原始数据并将其保存在正在运行的日志中。 计划作业是在远程计算机上创建的,在远程计算机上运行,并将其结果存储在远程计算机上。
该命令使用 Invoke-Command cmdlet 在 Servers.txt 文件中的计算机上运行 Register-ScheduledJob 命令。 Invoke-Command 命令使用 Credential 参数提供有权在 Servers.txt 文件中的计算机上创建计划作业的用户的凭据。
Register-ScheduledJob 命令在远程计算机上创建计划作业,该作业在$T变量中由作业触发器指定的计划上运行 EnergyData.ps1 脚本。 该脚本位于可供所有参与的计算机使用的文件服务器上。
示例 5:创建在远程计算机上运行脚本的计划作业
PS C:\> Register-ScheduledJob -Name "CollectEnergyData" -Trigger $T -MaxResultCount 99 -ScriptBlock { Invoke-Command -AsJob -ComputerName (Servers.txt) -FilePath "\\Srv01\Scripts\Get-EnergyData.ps1" -Credential $Admin -Authentication CredSSP }
此命令使用 Register-ScheduledJob cmdlet 在本地计算机上创建 CollectEnergyData 计划作业。 该命令使用 Trigger 参数指定作业计划和 MaxResultCount 参数,将保存的结果数增加到 99。
CollectEnergyData 作业使用 Invoke-Command cmdlet 在 Servers.txt 文件中列出的计算机上以后台形式运行 EnergyData.ps1 脚本。 Invoke-Command 命令使用 AsJob 参数在本地计算机上创建后台作业对象,即使 Energydata.ps1 脚本在远程计算机上运行也是如此。 该命令使用 Credential 参数指定有权在远程计算机上运行脚本的用户帐户,并使用值为 CredSSP 的 Authentication 参数来允许委派凭据。
参数
-ArgumentList
指定由 FilePath 参数指定的脚本参数或由 ScriptBlock 参数指定的命令的值。
参数属性
| 类型: | Object[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Authentication
指定用于对用户凭据进行身份验证的机制。 此参数的可接受值为:
- 违约
- 基本
- Credssp
- 摘要
- Kerberos
- 谈判
- NegotiateWithImplicitCredential
默认值为 Default。 有关此参数的值的详细信息,请参阅 MSDN 库中 AuthenticationMechanism 枚举。
警告:凭据安全服务提供程序(CredSSP)身份验证(其中用户凭据传递到要进行身份验证的远程计算机)旨在用于需要对多个资源进行身份验证的命令,例如访问远程网络共享。 此机制会增加远程操作的安全风险。 如果远程计算机遭到入侵,则传递给它的凭据可用于控制网络会话。
参数属性
| 类型: | AuthenticationMechanism |
| 默认值: | Default |
| 接受的值: | Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Confirm
在运行 cmdlet 之前,提示你进行确认。
参数属性
| 类型: | SwitchParameter |
| 默认值: | False |
| 支持通配符: | False |
| 不显示: | False |
| 别名: | cf |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Credential
指定有权运行计划作业的用户帐户。 默认值为当前用户。
键入用户名(如 User01 或 Domain01\User01),或输入 PSCredential 对象,例如 Get-Credential cmdlet 中的一个。 如果只输入用户名,系统会提示输入密码。
参数属性
| 类型: | PSCredential |
| 默认值: | Current user |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-FilePath
指定计划作业运行的脚本。 输入本地计算机上的 .ps1 文件的路径。 若要指定脚本参数的默认值,请使用 ArgumentList 参数。 每个 Register-ScheduledJob 命令都必须使用 ScriptBlock 或 FilePath 参数。
参数属性
| 类型: | String |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
FilePath
| Position: | 1 |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-InitializationScript
指定 Windows PowerShell 脚本(.ps1)的完全限定路径。 初始化脚本在为后台作业创建的会话中运行,该会话在由 ScriptBlock 参数指定的命令或由 FilePath 参数指定的脚本之前运行。 可以使用初始化脚本来配置会话,例如添加文件、函数或别名、创建目录或检查先决条件。
若要指定运行主作业命令的脚本,请使用 FilePath 参数。
如果初始化脚本生成错误(甚至非终止错误),则计划的作业的当前实例不会运行,其状态为“失败”。
参数属性
| 类型: | ScriptBlock |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | 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 属性的值。
若要删除当前执行历史记录和作业结果,请使用 Set-ScheduledJob cmdlet 的 ClearExecutionHistory 参数。
参数属性
| 类型: | Int32 |
| 默认值: | 32 |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Name
指定计划作业的名称。 该名称还用于计划作业的所有已启动实例。 该名称在计算机上必须是唯一的。 此参数是必需的。
参数属性
| 类型: | String |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | 0 |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-RunAs32
在 32 位进程中运行计划作业。
参数属性
| 类型: | SwitchParameter |
| 默认值: | False |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-RunEvery
用于指定运行作业的频率。 例如,使用此选项每 15 分钟运行一次作业。
参数属性
| 类型: | TimeSpan |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-RunNow
运行 Register-ScheduledJob cmdlet 后,立即启动作业。 此参数无需触发任务计划程序在注册后立即运行 Windows PowerShell 脚本,并且不需要用户创建指定开始日期和时间的触发器。
参数属性
| 类型: | SwitchParameter |
| 默认值: | False |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-ScheduledJobOption
设置计划作业的选项。 输入 ScheduledJobOptions 对象,例如使用 New-ScheduledJobOption cmdlet 或哈希表值创建的对象。
注册计划作业或使用 Set-ScheduledJobOption 或 Set-ScheduledJob cmdlet 更改选项时,可以为计划作业设置选项。
许多选项及其默认值决定了计划作业是否运行以及何时运行。 在计划作业之前,请务必查看这些选项。 有关计划作业选项(包括默认值)的说明,请参阅 New-ScheduledJobOption。
若要提交哈希表,请使用以下键。 在以下哈希表中,键的默认值显示。
@{StartIfOnBattery=$False; StopIfGoingOnBattery=$True; WakeToRun=$False; StartIfNotIdle=$False; IdleDuration="00:10:00"; IdleTimeout="01:00:00"; StopIfGoingOffIdle=$True; RestartOnIdleResume=$False; ShowInTaskScheduler=$True; RunElevated=$False; RunWithoutNetwork=$False; DoNotAllowDemandStart=$False; MultipleInstancePolicy=IgnoreNew}
参数属性
| 类型: | ScheduledJobOptions |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-ScriptBlock
指定计划作业运行的命令。 将命令括在大括号 ({ }) 中以创建脚本块。 若要指定命令参数的默认值,请使用 ArgumentList 参数。
每个 Register-ScheduledJob 命令都必须使用 ScriptBlock 或 FilePath 参数。
参数属性
| 类型: | ScriptBlock |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ScriptBlock
| Position: | 1 |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Trigger
指定计划作业的触发器。 输入一个或多个 ScheduledJobTrigger 对象,例如 New-JobTrigger cmdlet 返回的对象,或作业触发器键和值的哈希表。
作业触发器启动计划作业。 触发器可以指定一次性或定期计划或事件,例如用户登录或 Windows 启动时。
触发器 参数是可选的。 可以在创建计划作业、使用 Add-JobTrigger、Set-JobTrigger 或 Set-ScheduledJob cmdlet 在以后添加或更改作业触发器时添加触发器,或使用 Start-Job cmdlet 立即启动计划作业。 还可以创建和维护计划作业,而无需用作模板的触发器。
若要提交哈希表,请使用以下键:
@{Frequency="Once"(或每日、每周、AtStartup、AtLogon):At="3am"(或任何有效的时间字符串);DaysOfWeek="Monday", "Wednesday"(或日期名称的任意组合):Interval=2(或任何有效的频率间隔):RandomDelay="30minutes"(或任何有效的时间跨度字符串);User="Domain1\User01"(或任何有效用户;仅用于 AtLogon 频率值) }
参数属性
| 类型: | ScheduledJobTrigger[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-WhatIf
显示 cmdlet 运行时会发生什么情况。 命令脚本未运行。
参数属性
| 类型: | SwitchParameter |
| 默认值: | False |
| 支持通配符: | 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。
输入
None
不能通过管道将输入传递给此 cmdlet。
输出
ScheduledJobDefinition
备注
每个计划作业都保存在本地计算机上的 $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs 目录的子目录中。 子目录为计划作业命名,并包含计划作业的 XML 文件及其执行历史记录的记录。 有关磁盘上计划作业的详细信息,请参阅about_Scheduled_Jobs_Advanced。
在 Windows PowerShell 中创建的计划作业显示在任务计划程序库\Microsoft\Windows\PowerShell\ScheduledJobs 文件夹中的任务计划程序中。 可以使用任务计划程序查看和编辑计划作业。
可以使用任务计划程序、SchTasks.exe 命令行工具和任务计划程序 cmdlet 来管理使用计划作业 cmdlet 创建的计划作业。 但是,不能使用计划作业 cmdlet 来管理在任务计划程序中创建的任务。
如果计划的作业命令失败,Windows PowerShell 将返回错误消息。 但是,如果任务计划程序尝试运行作业时作业失败,则错误不适用于 Windows PowerShell。
如果计划作业未运行,请使用以下方法查找原因。
- 验证作业触发器是否已正确设置。 -- 验证作业选项中设置的条件是否满足。
- 验证运行作业的用户帐户是否有权在作业中运行命令或脚本。
- 检查任务计划程序历史记录中是否存在错误
- 检查任务计划程序事件日志中是否存在错误。
有关详细信息,请参阅about_Scheduled_Jobs_Troubleshooting。
相关链接
- 关于计划任务
- Add-JobTrigger
- Disable-JobTrigger
- Disable-ScheduledJob
- Enable-JobTrigger
- Enable-ScheduledJob
- Get-JobTrigger
- Get-ScheduledJob
- Get-ScheduledJobOption
- New-JobTrigger
- New-ScheduledJobOption
- Register-ScheduledJob
- Remove-JobTrigger
- Set-JobTrigger
- Set-ScheduledJob
- Set-ScheduledJobOption
- Unregister-ScheduledJob