about_Scheduled_Jobs_Advanced
应用到: Windows PowerShell 3.0, Windows PowerShell 4.0
about_Scheduled_Jobs_Advanced
说明高级计划作业主题,包括构成计划作业的基础的文件结构。
本主题包括以下部分:
-- 计划作业目录和文件
-- 重命名计划作业
-- 立即启动计划作业
-- 管理执行历史记录
Windows PowerShell® 计划作业既是 Windows PowerShell 作业,也是任务计划程序任务。每个计划作业都在任务计划程序中注册并以 Microsoft .Net Framework 序列化 XML 格式保存在磁盘上。
当你创建计划作业时,Windows PowerShell 将在本地计算机上的 $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs 目录中为计划作业创建一个目录。目录名称与作业名称相同。
下面是示例 ScheduledJobs 目录。
PS C:\ps-test> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 9/29/2011 10:03 AM ArchiveProjects
d---- 9/30/2011 1:18 PM Inventory
d---- 10/20/2011 9:15 AM Backup-Scripts
d---- 11/7/2011 10:40 AM ProcessJob
d---- 11/2/2011 10:25 AM SecureJob
d---- 9/27/2011 1:29 PM Test-HelpFiles
d---- 9/26/2011 4:22 PM DeployPackage
每个计划作业都有其自己的目录。目录包含计划作业 XML 文件和 Output 子目录。
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob
Directory:
C:\Users\User1\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 11/1/2011 3:00 PM Output
-a--- 11/1/2011 3:43 PM 7281 ScheduledJobDefinition.xml
计划作业的 Output 目录包含其执行历史记录。每次作业触发器启动计划作业时,Windows PowerShell 将在 Output 目录中创建以时间戳命名的目录。时间戳目录在 Results.xml 文件中包含该作业的结果,在 Status.xml 文件中包含作业状态。
以下命令显示 ProcessJob 计划作业的执行历史记录目录。
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob\Output
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob\Output
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 11/2/2011 3:00 AM 20111102-030002-260
d---- 11/3/2011 3:00 AM 20111103-030002-277
d---- 11/4/2011 3:00 AM 20111104-030002-209
d---- 11/5/2011 3:00 AM 20111105-030002-251
d---- 11/6/2011 3:00 AM 20111106-030002-174
d---- 11/7/2011 12:00 AM 20111107-000001-914
d---- 11/7/2011 3:00 AM 20111107-030002-376
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob\Output\20111102-030002-260
Directory: C:\Users\juneb\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\testjob\output\20111102-030002-260
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 11/2/2011 3:00 AM 581106 Results.xml
-a--- 11/2/2011 3:00 AM 9451 Status.xml
你可以打开和检查 ScheduledJobDefinition.xml、Results.xml 和 Status.xml 文件,或使用 Select-XML cmdlet 来解析文件。
警告:不要编辑 XML 文件。如果任何 XML 文件包含无效的 XML,Windows PowerShell 将删除计划作业及其执行历史记录,包括作业结果。
你可以采用两种方式之一立即启动计划作业:
-- 运行 Start-Job cmdlet 以启动任何计划作业
-- 将 RunNow 参数添加到 Register-ScheduledJob 命令,以在运行命令时立即启动作业
通过使用 Start-Job cmdlet 启动的作业是标准 Windows PowerShell 后台作业,不是计划作业的实例。和所有后台作业一样,这些作业将立即启动(它们不遵循作业选项,也不受作业触发器影响),并且它们的输出不保存在计划作业目录的 Output 目录中。
以下命令使用 Start-Job cmdlet 的 DefinitionName 参数启动 ProcessJob 计划作业。
Start-Job -DefinitionName ProcessJob
若要管理作业并获取作业结果,请使用 Job cmdlet。有关 Job cmdlet 的详细信息,请参阅 about_Jobs (https://go.microsoft.com/fwlink/?LinkID=113251)。
注意:若要在计划作业的实例上使用 Job cmdlet,PSScheduledJob 模块必须导入到会话中。若要导入 PSScheduledJob 模块,请键入“Import-module PSScheduledJob”(不带引号)或使用任何 Scheduled Job cmdlet,如 Get-ScheduledJob。
若要重命名计划作业,请使用 Set-ScheduledJob cmdlet 的 Name 参数。当你重命名计划作业时,Windows PowerShell 将更改计划作业的名称和计划作业目录。但是,它不会更改已经运行的计划作业的实例名称。
若要获取该作业实例开始和结束的时间,请使用 Get-Job 为计划作业返回的 ScheduledJob 对象的 PSBeginTime 和 PSEndTime 属性。
以下示例使用 Format-Table cmdlet 的 Property 参数来显示表中每个作业实例的 PSBeginTime 和 PSEndTime 属性。该命令使用经计算的属性来显示每个作业实例经过的时间。
PS C:\> Get-job -Name UpdateHelpJob | Format-Table -Property ID, PSBeginTime, PSEndTime,
@{Label="Elapsed Time";Expression={$_.PsEndTime - $_.PSBeginTime}}
Id PSBeginTime PSEndTime Elapsed Time
-- ----------- --------- ------------
2 11/3/2011 3:00:01 AM 11/3/2011 3:00:39 AM 00:00:38.0053854
3 11/4/2011 3:00:02 AM 11/4/2011 3:01:01 AM 00:00:59.1188475
4 11/5/2011 3:00:02 AM 11/5/2011 3:00:50 AM 00:00:48.3692034
5 11/6/2011 3:00:01 AM 11/6/2011 3:00:54 AM 00:00:52.8013036
6 11/7/2011 3:00:01 AM 11/7/2011 3:00:38 AM 00:00:37.1930350
7 11/8/2011 3:00:01 AM 11/8/2011 3:00:57 AM 00:00:56.2570556
8 11/9/2011 3:00:03 AM 11/9/2011 3:00:55 AM 00:00:51.8142222
9 11/10/2011 3:00:02 AM 11/10/2011 3:00:42 AM 00:00:40.7195954
你可以确定为每个计划作业保存的作业实例结果的数量,并且随时删除任何计划作业的执行历史记录和已保存的作业结果。
计划作业的 ExecutionHistoryLength 属性可确定为计划作业保存了多少作业实例结果。当已保存结果的数量超过 ExecutionHistoryLength 属性的值时,Windows PowerShell 将删除最早实例的结果以为最新实例的结果留出空间。
默认情况下,Windows PowerShell 将保存每个计划作业的 32 个实例的执行历史记录和结果。若要更改该值,请使用 Register-ScheduledJob 或 Set-ScheduledJob cmdlet 的 MaxResultCount 参数。
若要删除计划作业的执行历史记录和所有结果,请使用 Set-ScheduledJob cmdlet 的 ClearExecutionHistory 参数。删除此执行历史记录不会阻止 Windows PowerShell 保存计划作业的新实例的结果。请在此处插入部分正文。
以下命令使用 Register-ScheduledJob cmdlet 创建计划作业。该命令使用值为 12 的 MaxResultCount 参数,仅保存计划作业的 12 个最新的作业实例结果。
Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Process} -MaxResultCount 12
以下命令使用 Set-ScheduledJob cmdlet 的 MaxResultCount 参数将已保存实例结果的数量增加到 15 个。
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 15
以下命令删除 ProcessJob 计划作业的执行历史记录和所有当前已保存的结果。
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
以下命令获取计算机上所有计划作业的名称和 ExecutionHistoryLength 属性的值,并将它们显示在表中。
Get-ScheduledJob | Format-Table -Property Name, ExecutionHistoryLength -AutoSize
about_Scheduled_Jobs
about_Scheduled_Jobs_Troubleshooting
about_Jobs