Windows定时备份:任务计划程序设置
适用环境:Windows Server 2019/2022/2025,Windows PowerShell与任务计划程序可用。先按Robocopy文件备份与恢复验证完成一次手工备份和试恢复;需要后台运行时须由管理员选择合适的任务账号。
本教程解决“手动能备份,定时却没产物”的问题。任务计划程序只负责按条件启动程序,不会判断文件是否一致、备份是否能恢复。先把静态目录备份保存成独立脚本,再配置触发器和结果检查。
保存可以返回正确状态的脚本
在 C:\BaoleBackup 建立受控目录,将以下内容保存为 backup-files.ps1。先修改真实源和目标路径,确认它们互不包含。脚本内不写登录密码,也不直接复制运行中的数据库文件。
$ErrorActionPreference = 'Stop'
try {
$sourceDir = 'C:\Sites\Example'
$backupRoot = 'E:\Backups'
if (-not (Test-Path -LiteralPath $sourceDir -PathType Container)) { throw '源目录不存在' }
$runDir = Join-Path $backupRoot ('files-' + (Get-Date -Format 'yyyyMMdd-HHmmss'))
New-Item -ItemType Directory -Path $runDir -ErrorAction Stop | Out-Null
$copyLog = Join-Path $runDir 'robocopy.log'
robocopy $sourceDir (Join-Path $runDir 'data') /E /COPY:DAT /DCOPY:DAT /XJ /R:2 /W:3 /LOG:$copyLog
$copyStatus = $LASTEXITCODE
if ($copyStatus -ge 8) { throw "Robocopy失败:$copyStatus" }
"COMPLETE $runDir" | Set-Content -LiteralPath (Join-Path $runDir 'COMPLETE.txt') -Encoding UTF8
exit 0
} catch {
Write-Error $_ -ErrorAction Continue
exit 1
}
使用未来执行任务的同一账号,在 PowerShell 运行 & C:\BaoleBackup\backup-files.ps1,并检查 $LASTEXITCODE、日志及恢复样本。若组织的脚本执行策略阻止运行,应使用经批准的脚本签名或管理方式,不在任务参数里长期绕过安全策略。
在任务计划程序创建任务
- 按 Win+R,输入 taskschd.msc,打开“任务计划程序”。在“任务计划程序库”中选择“创建任务”,名称填写 BaoleFileBackup。
- “常规”选择实际有源读取权、目标写入权的账号。需要无人登录也运行时选择对应选项,由本人按系统要求提供凭据;不把密码写进脚本或文档截图。仅在确实需要时选择最高权限。
- “触发器”新建每天运行的时间,核对服务器时区及首次开始日期。
- “操作”选择“启动程序”:程序使用 Windows PowerShell 的完整路径;参数填 -NoProfile -File "C:\BaoleBackup\backup-files.ps1";“起始于”填 C:\BaoleBackup。
- “设置”中选择任务已运行时不启动新实例。按实际维护窗口设置合理的最长运行时间;不要让正常的大备份被过短时间强行终止。
程序路径可在现有 PowerShell 中通过 (Get-Command powershell.exe).Source 查看。后台任务不应依赖仅在当前远程桌面会话映射的盘符;网络共享应使用明确的 UNC 路径并核实任务账号权限。
先手动触发任务,再等一次真实定时触发
- 在任务库选中任务,点击“运行”,等待状态从运行中结束。
- 检查“上次运行时间”“上次运行结果”和历史记录。脚本按本例返回0时通常显示0x0;这只说明脚本返回成功,还要打开新批次查看日志、COMPLETE.txt和实际文件。
- 等到设置的时间后,确认新增的是那次定时批次,而不是刚才手动留下的文件。
- 抽样恢复及校验成功后,才把任务记为已投入使用。定期查看失败、没有触发及目标空间不足的情况。
后台失败时先查这三处
| 现象 | 优先检查 |
|---|---|
| 手动运行成功、后台失败 | 任务账号、网络共享凭据、映射盘符和文件权限。 |
| 有上次运行时间但没有备份 | 程序路径、-File参数引号、工作目录、脚本日志与返回码。 |
| 任务一直运行或被终止 | 源文件占用、重试设置、备份体量、最长运行时间以及存储速度。 |