本文目录导读:

是的,完全可以!使用脚本自动创建任务计划(Windows 任务计划程序)是一个非常实用的自动化操作,以下是几种常用的方法:
PowerShell 脚本(推荐,最灵活)
# 创建计划任务脚本示例
$action = New-ScheduledTaskAction -Execute "C:\Path\YourApp.exe" -Argument "-参数1 值1"
$trigger = New-ScheduledTaskTrigger -Daily -At "09:00AM"
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
Register-ScheduledTask -TaskName "MyDailyTask" `
-Action $action `
-Trigger $trigger `
-Principal $principal `
-Settings $settings
常用触发器示例:
# 每天凌晨2点 $trigger = New-ScheduledTaskTrigger -Daily -At "02:00AM" # 系统启动时 $trigger = New-ScheduledTaskTrigger -AtStartup # 用户登录时 $trigger = New-ScheduledTaskTrigger -AtLogOn # 每周一上午8点 $trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At "08:00AM" # 每30分钟重复一次 $trigger = New-ScheduledTaskTrigger -Daily -At "00:00" -RepetitionInterval (New-TimeSpan -Minutes 30) -RepetitionDuration (New-TimeSpan -Days 365)
批处理文件(schtasks命令)
@echo off REM 创建每天上午9点运行的计划任务 schtasks /create /tn "MyDailyBackup" /tr "C:\Scripts\backup.bat" /sc daily /st 09:00 /ru SYSTEM REM 创建每周一运行的任务 schtasks /create /tn "WeeklyReport" /tr "C:\Scripts\report.exe" /sc weekly /d MON /st 10:00 REM 创建系统启动时运行的任务 schtasks /create /tn "StartupTask" /tr "C:\Program Files\App\app.exe" /sc onstart
VBScript 脚本
Set scheduler = CreateObject("Schedule.Service")
Call scheduler.Connect()
Set taskDefinition = scheduler.NewTask(0)
' 设置触发器(每天上午8点)
Set trigger = taskDefinition.Triggers.Create(1) ' 1 = 每日任务
trigger.StartBoundary = "2024-01-01T08:00:00"
trigger.DaysInterval = 1
' 设置操作
Set action = taskDefinition.Actions.Create(0) ' 0 = 执行程序
action.Path = "C:\Windows\System32\notepad.exe"
action.Arguments = "C:\test.txt"
' 注册任务
Call scheduler.GetFolder("\").RegisterTaskDefinition("MyVBSTask", taskDefinition, 6, "", "", 3)
实用脚本模板
PowerShel 带错误处理的完整脚本
param(
[string]$TaskName = "MyAutoTask",
[string]$ExecPath = "C:\Scripts\myapp.exe",
[string]$ExecArgs = "",
[string]$TaskTime = "06:00AM"
)
try {
# 检查任务是否已存在,存在则先删除
$existing = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
if ($existing) {
Write-Host "任务 '$TaskName' 已存在,正在更新..." -ForegroundColor Yellow
Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
}
# 创建新任务
$action = New-ScheduledTaskAction -Execute $ExecPath -Argument $ExecArgs
$trigger = New-ScheduledTaskTrigger -Daily -At $TaskTime
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
Register-ScheduledTask -TaskName $TaskName `
-Action $action `
-Trigger $trigger `
-Principal $principal `
-Description "由脚本自动创建的定时任务" `
-Force
Write-Host "✓ 任务计划 '$TaskName' 创建成功!" -ForegroundColor Green
Write-Host " 执行路径: $ExecPath"
Write-Host " 执行时间: 每天 $TaskTime"
}
catch {
Write-Host "✗ 创建失败: $_" -ForegroundColor Red
exit 1
}
实用场景脚本
自动备份脚本
# 创建每日备份任务 $backupScript = @" robocopy D:\重要数据 E:\Backup /MIR /R:3 /W:10 /LOG+:C:\Logs\backup.log "@ # 保存为批处理文件 Set-Content -Path "C:\Scripts\daily_backup.bat" -Value $backupScript # 创建计划任务 $action = New-ScheduledTaskAction -Execute "C:\Scripts\daily_backup.bat" $trigger = New-ScheduledTaskTrigger -Daily -At "02:00AM" Register-ScheduledTask -TaskName "DailyBackup" -Action $action -Trigger $trigger
远程创建任务
# 在远程电脑上创建任务
$cred = Get-Credential
Invoke-Command -ComputerName "Server01" -Credential $cred -ScriptBlock {
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\cleanup.ps1"
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At "03:00AM"
Register-ScheduledTask -TaskName "WeeklyCleanup" -Action $action -Trigger $trigger
}
注意事项:
- 权限要求:需要管理员权限运行
- 路径格式:使用完整路径,避免相对路径
- 触发器类型:支持 daily, weekly, monthly, onstart, onlogon 等
- 错误处理:建议添加 try-catch 和日志记录
- 测试环境:先在测试环境验证后再部署到生产环境
使用这些脚本可以大大提高批量部署和管理计划任务的效率,特别适合运维自动化和批量部署场景。