使用Powershell管理Windows計(jì)劃任務(wù)

在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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容