在Windows系統(tǒng)中,我們經(jīng)常使用Schedule Task來(lái)配置計(jì)劃任務(wù),來(lái)完成需要一段時(shí)間內(nèi)重復(fù)完成的操作。Windows Schedule Task與Linux的Cron任務(wù)管理系統(tǒng)極為相似,都用于管理定時(shí)任務(wù),但是前者大多數(shù)人都是以圖形化操作為主,Powershell的出現(xiàn)將會(huì)改變這種情況。使用Powershell管理Schedule Task會(huì)事Windows系統(tǒng)的管理更為高效。
Windows提供專用于任務(wù)管理的模塊ScheduledTask
安裝該模塊后我們可以看到如下相關(guān)命令,這些命令將用與計(jì)劃任務(wù)的管理
Import-Module -Name 'ScheduledTasks'
Get-Command -Module 'ScheduledTasks'
image.png
創(chuàng)建新的計(jì)劃任務(wù)
下面內(nèi)容將創(chuàng)建一條計(jì)劃任務(wù),計(jì)劃任務(wù)的參數(shù)如下
- Action: 執(zhí)行一個(gè)powershell腳本,使用命令[New-ScheduledTaskAction]
- Principal (Account):指定任務(wù)以系統(tǒng)賬戶,最高權(quán)限執(zhí)行,使用命令[New-ScheduledTaskPrincipal]
- Trigger:任務(wù)每天早上3點(diǎn)執(zhí)行,并創(chuàng)建后的下一天開始,使用命令[New-ScheduledTaskTrigger]
- Settings:如果任務(wù)執(zhí)行時(shí)間超過(guò)30分鐘,將會(huì)被終止,使用命令[New-ScheduledTaskSettingSet]
創(chuàng)建觸發(fā)條件Trgger
實(shí)例中,任務(wù)設(shè)定每日觸發(fā),并于創(chuàng)建后的第一天開始執(zhí)行,使用At參數(shù)設(shè)定任務(wù)運(yùn)行日期和時(shí)間
$Params = @{
"Daily" = $True
"At" = (Get-Date '3 AM').AddDays(1)
}
$Trigger = New-ScheduledTaskTrigger @Params
創(chuàng)建Action
默認(rèn)情況下,Schedule Task不能運(yùn)行powershell腳本,因此我們要使用Execute參數(shù)來(lái)調(diào)用powershell
$Params = @{
"Execute" = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
"Argument" = '-File "C:\\Scripts\\PSScript.ps1"'
}
$Action = New-ScheduledTaskAction @Params
創(chuàng)建任務(wù)計(jì)劃Principal
使用最高權(quán)限運(yùn)行選項(xiàng),將使運(yùn)行計(jì)劃任務(wù)的賬戶提升至管理員身份,使其有足夠的權(quán)限運(yùn)行任務(wù)
$Params = @{
"UserID" = "NT AUTHORITY\\SYSTEM"
"LogonType" = 'ServiceAccount'
"RunLevel" = 'Highest'
}
$Principal = New-ScheduledTaskPrincipal @Params
定義其它計(jì)劃任務(wù)設(shè)置
計(jì)劃任務(wù)設(shè)置有很多,我們將在本例中用到如下設(shè)置
ExecutionTimeLimit- 任務(wù)運(yùn)行最大時(shí)長(zhǎng),超過(guò)該值及時(shí)任務(wù)未完成也將被終止,本例設(shè)置為30分鐘AllowStartIfOnBatteries- 筆記本在使用電池為電源時(shí),是否運(yùn)行DontStopIfGoingOnBatteries- 切換電源為電池,是否停止任務(wù)RestartCount- 任務(wù)運(yùn)行失敗后重試次數(shù),本例設(shè)置為2次RestartInterval- 任務(wù)運(yùn)行失敗后再次重試間隔,本例設(shè)置間隔5分鐘
$Params = @{
"ExecutionTimeLimit" = (New-TimeSpan -Minutes 30)
"AllowStartIfOnBatteries" = $True
"DontStopIfGoingOnBatteries" = $True
"RestartCount" = 2
"RestartInterval" = (New-TimeSpan -Minutes 5)
}
$Settings = New-ScheduledTaskSettingsSet @Params
創(chuàng)建并注冊(cè)Task,只有Task被注冊(cè)后,Schedule Task才能識(shí)別并管理它
$Params = @{
"Action" = $Action
"Principal" = $Principal
"Trigger" = $Trigger
"Setting" = $Settings
}
$Task = New-ScheduledTask @Params
$Task | Register-ScheduledTask -TaskName 'PSScript'
查看創(chuàng)建的task的信息
Get-ScheduledTask -TaskName 'PSScript' | Format-List
image.png
啟用和禁用Task
禁用Task
Get-ScheduledTask -TaskName 'PSScript' | Disable-ScheduledTask
image.png
啟用Task
Get-ScheduledTask -TaskName 'PSScript' | Enable-ScheduledTask
image.png
運(yùn)行task
Get-ScheduledTask -TaskName 'PSScript' | Start-ScheduledTask
停止task
Get-ScheduledTask -TaskName 'PSScript' | Stop-ScheduledTask



