使用Powershell管理Windows计划任务

在Windows系统中,我们经常使用Schedule Task来配置计划任务,来完成需要一段时间内重复完成的操作。Windows Schedule Task与Linux的Cron任务管理系统极为相似,都用于管理定时任务,但是前者大多数人都是以图形化操作为主,Powershell的出现将会改变这种情况。使用Powershell管理Schedule Task会事Windows系统的管理更为高效。

Windows提供专用于任务管理的模块ScheduledTask

安装该模块后我们可以看到如下相关命令,这些命令将用与计划任务的管理

Import-Module -Name 'ScheduledTasks'
    
Get-Command -Module 'ScheduledTasks'
image.png

创建新的计划任务

下面内容将创建一条计划任务,计划任务的参数如下

  • Action: 执行一个powershell脚本,使用命令[New-ScheduledTaskAction]
  • Principal (Account):指定任务以系统账户,最高权限执行,使用命令[New-ScheduledTaskPrincipal]
  • Trigger:任务每天早上3点执行,并创建后的下一天开始,使用命令[New-ScheduledTaskTrigger]
  • Settings:如果任务执行时间超过30分钟,将会被终止,使用命令[New-ScheduledTaskSettingSet]
创建触发条件Trgger

实例中,任务设定每日触发,并于创建后的第一天开始执行,使用At参数设定任务运行日期和时间

$Params = @{
 "Daily" = $True
 "At"    = (Get-Date '3 AM').AddDays(1)
}
$Trigger = New-ScheduledTaskTrigger @Params
创建Action

默认情况下,Schedule Task不能运行powershell脚本,因此我们要使用Execute参数来调用powershell

$Params = @{
 "Execute"  = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
 "Argument" = '-File "C:\\Scripts\\PSScript.ps1"'
}
 
$Action = New-ScheduledTaskAction @Params
创建任务计划Principal

使用最高权限运行选项,将使运行计划任务的账户提升至管理员身份,使其有足够的权限运行任务

$Params = @{
 "UserID"    = "NT AUTHORITY\\SYSTEM"
 "LogonType" = 'ServiceAccount'
 "RunLevel"  = 'Highest'
}
 
$Principal = New-ScheduledTaskPrincipal @Params
定义其它计划任务设置

计划任务设置有很多,我们将在本例中用到如下设置

  • ExecutionTimeLimit - 任务运行最大时长,超过该值及时任务未完成也将被终止,本例设置为30分钟
  • AllowStartIfOnBatteries - 笔记本在使用电池为电源时,是否运行
  • DontStopIfGoingOnBatteries - 切换电源为电池,是否停止任务
  • RestartCount - 任务运行失败后重试次数,本例设置为2次
  • RestartInterval - 任务运行失败后再次重试间隔,本例设置间隔5分钟
$Params = @{
 "ExecutionTimeLimit"         = (New-TimeSpan -Minutes 30)
 "AllowStartIfOnBatteries"    = $True
 "DontStopIfGoingOnBatteries" = $True
 "RestartCount"               = 2
 "RestartInterval"            = (New-TimeSpan -Minutes 5)
}
 
$Settings = New-ScheduledTaskSettingsSet @Params
创建并注册Task,只有Task被注册后,Schedule Task才能识别并管理它
$Params = @{
 "Action"    = $Action
 "Principal" = $Principal
 "Trigger"   = $Trigger
 "Setting"   = $Settings
}
 
$Task = New-ScheduledTask @Params
$Task | Register-ScheduledTask -TaskName 'PSScript'
查看创建的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

运行task
Get-ScheduledTask -TaskName 'PSScript' | Start-ScheduledTask
停止task
Get-ScheduledTask -TaskName 'PSScript' | Stop-ScheduledTask

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容