实用脚本能自动创建任务计划吗?

wen 实用脚本 2

本文目录导读:

实用脚本能自动创建任务计划吗?

  1. PowerShell 脚本(推荐,最灵活)
  2. 批处理文件(schtasks命令)
  3. VBScript 脚本
  4. 实用脚本模板
  5. 实用场景脚本
  6. 注意事项:

是的,完全可以!使用脚本自动创建任务计划(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
}

注意事项:

  1. 权限要求:需要管理员权限运行
  2. 路径格式:使用完整路径,避免相对路径
  3. 触发器类型:支持 daily, weekly, monthly, onstart, onlogon 等
  4. 错误处理:建议添加 try-catch 和日志记录
  5. 测试环境:先在测试环境验证后再部署到生产环境

使用这些脚本可以大大提高批量部署和管理计划任务的效率,特别适合运维自动化和批量部署场景。

抱歉,评论功能暂时关闭!