计划工作简单介绍
ScheduledJob相关的命令位于PowerShell的PSScheduledJob组件 。该组件是在Windows PowerShell 3.0 版本中引进的,当然也只能在PowerShell 3.0和最新的版本环境中使用。
Windows PowerShell 计划工作非常实用,因为它整合了PowerShell 后台工作和Windows 中的计划任务。 像Windows PowerShell后台工作一样,计划工作也是在后台异步运行。因为一个已经运行的计划工作的实例,也可以使用Start-Job, Get-Job, Stop-Job, and Receive-Job 这些命令来管理。
像“计划任务”中的任务,计划工作被保存到硬盘中。你可以在“计划任务”中查看和管理这些工作:需要时禁用或启用它们,以模板的形式来运行和使用它们。
计划工作命令
查看所有PSScheduledJob组件中的命令
通过下面的命令查看所有PSScheduledJob的命令:
Get-Command -Module PSScheduledJob
PS C:\> Get-Command -Module PSScheduledJob CommandType Name ModuleName ----------- ---- ---------- Cmdlet Add-JobTrigger PSScheduledJob Cmdlet Disable-JobTrigger PSScheduledJob Cmdlet Disable-ScheduledJob PSScheduledJob Cmdlet Enable-JobTrigger PSScheduledJob Cmdlet Enable-ScheduledJob PSScheduledJob Cmdlet Get-JobTrigger PSScheduledJob Cmdlet Get-ScheduledJob PSScheduledJob Cmdlet Get-ScheduledJobOption PSScheduledJob Cmdlet New-JobTrigger PSScheduledJob Cmdlet New-ScheduledJobOption PSScheduledJob Cmdlet Register-ScheduledJob PSScheduledJob Cmdlet Remove-JobTrigger PSScheduledJob Cmdlet Set-JobTrigger PSScheduledJob Cmdlet Set-ScheduledJob PSScheduledJob Cmdlet Set-ScheduledJobOption PSScheduledJob Cmdlet Unregister-ScheduledJob PSScheduledJob
对PSScheduledJob组件中的命令分组
通过下面的命令对这些命令按照名词进行分组:
Get-Command -Module PSScheduledJob | Group-Object Noun
PS C:\> Get-Command -Module PSScheduledJob | Group-Object Noun Count Name Group ----- ---- ----- 7 JobTrigger {Add-JobTrigger, Disable-JobTrigger, Enable-JobTrigger, Get-JobTrigger...} 6 ScheduledJob {Disable-ScheduledJob, Enable-ScheduledJob, Get-ScheduledJob, Register-ScheduledJob...} 3 ScheduledJobOption {Get-ScheduledJobOption, New-ScheduledJobOption, Set-ScheduledJobOption}
分组以后发现主要有三类:JobTrigger,ScheduledJob,ScheduledJobOption
- JobTrigger:定义工作怎样展开(如开始时间,开始频率,用户凭据等)
- ScheduledJob:定义工作内容(一般是脚本块)
- ScheduledJobOption:定义工作的一些高级选项(如是否在电池模式下运行,是否在“计划任务中”显示等)
计划工作演示
接下来,我们来看一个简历的例子。
需求:每2分钟来自动清理一下IE的历史记录
添加计划工作
Register-ScheduledJob -Name clean-ie-history -ScriptBlock { RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1 }
添加计划工作时,需要管理员权限,否则可能会遇到下面的错误:
Register-ScheduledJob : A directory not found error occurred while registering scheduled job definition
clean-ie-history. Make sure you are running Windows PowerShell with elevated privileges.
添加完毕后重启PowerShell控制台,看它是否还存在,是的,它还在呢!
$job=Get-ScheduledJob -Name clean-ie-history $job
创建工作触发器
$jobt=New-JobTrigger -Once -At (Get-Date).AddMinutes(1) -RepetitionInterval '00:02:00' -RepetitionDuration '00:05:00'
给计划工作添加触发器
$job=Get-ScheduledJob -Name clean-ie-history $job | Add-JobTrigger -Trigger $jobt
验证计划工作
接下来通过打开“计划任务”管理器(taskschd.msc),验证我们创建的job。 位于Microsoft\Windows\PowerShell\ScheduledJob目录:
禁用和启用计划工作
$job | Disable-ScheduledJob $job | Enable-ScheduledJob
删除计划工作
$job | Unregister-ScheduledJob
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
广播: PowerShell 获取必应首页背景图片 | PowerShell 中文博客
广播: PS顿悟:计划工作与电池模式 | PowerShell 中文博客
请问想要设置Daily 每分钟重复一次的trigger,怎么实现呢,我在MSDN 里面查到repetition interval 只对once有用,如果是想要对daily的repetition,应该怎么实现呢?谢谢
-Once
Specifies a non-recurring (one time) or custom repeating schedule. To create a repeating schedule, use the Once parameter with the RepetitionDuration and RepetitionInterval parameters.
-Once 参数不仅支持只执行一次,还支持自定义重复计划。
Example 8: Create a repeating job trigger
PS C:\> New-JobTrigger -Once -At “09/12/2013 1:00:00” -RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration (New-Timespan -Hours 48)
This command creates a job trigger that runs a job every 60 minutes for 48 hours beginning on September 12, 2013 at 1:00 AM.
谢谢,我知道once可以设置重复计划,我现在想要对daily设置重复计划,但是repetitioninterval对daily 无效,我想知道daily 的重复计划怎么设置,谢谢
多谢大大的教程,一个小问题,Group-Object Noun,这里的Noun 在参考文档中没有看到,有介绍吗?谢谢啦