Windows Server 2012自动备份脚本PowerShell编写利用Windows Server自带的Windows Server Backup功能来实现自动备份

脚本使用说明

  1. 脚本功能
    • 自动检查并安装 Windows Server Backup 功能
    • 创建或更新备份策略
    • 执行系统备份并验证备份结果
    • 支持设置备份保留天数
  2. 配置修改

    请根据实际需求修改脚本开头的配置参数:

    • $backupPolicyName:备份策略名称
    • $backupDestination:备份目标路径(本地路径或网络路径)
    • $backupItems:需要备份的卷(默认只备份系统盘 C:)
    • $retentionPolicy:备份保留天数
    • $isNetworkDestination:是否使用网络路径作为备份目标
  3. 执行方式
    • 以管理员身份打开 PowerShell
    • 运行命令:(允许运行本地脚本)
      Set-ExecutionPolicy RemoteSigned​
    • 执行脚本:
      .\AutoBackup.ps1​
  4. 设置自动运行
    • 打开 “任务计划程序”
    • 创建基本任务,设置触发时间(如每天凌晨 2 点)
    • 操作选择 “启动程序”,程序 / 脚本选择powershell.exe
    • 添加参数:
      -File "C:\路径\AutoBackup.ps1"​
注意:如果使用网络路径作为备份目标,请确保服务器有足够的权限访问该网络共享。
# Windows Server 2012 自动备份脚本
# 功能:自动执行系统备份,支持备份到本地磁盘或网络共享
# 作者:豆包编程助手
# 日期:2025-10-08

# 配置备份参数
$backupPolicyName = "DailySystemBackup"  # 备份策略名称
$backupDestination = "D:\Backup"         # 备份目标路径(本地路径或网络路径如 \\server\share\backup)
$backupItems = @("C:")                   # 需要备份的卷,默认系统盘C:
$retentionPolicy = 7                     # 备份保留天数
$isNetworkDestination = $false           # 是否是网络备份目标

# 检查Windows Server Backup功能是否已安装
$wsbFeature = Get-WindowsFeature Windows-Server-Backup
if ($wsbFeature.Installed -eq $false) {
    Write-Host "正在安装Windows Server Backup功能..."
    Install-WindowsFeature Windows-Server-Backup -IncludeManagementTools
    if ($LASTEXITCODE -ne 0) {
        Write-Error "安装Windows Server Backup功能失败,请手动安装后重试"
        exit 1
    }
}

# 检查备份目标路径是否存在
if ($isNetworkDestination) {
    # 网络路径不需要预先创建,但需要确保有访问权限
    Write-Host "使用网络备份目标: $backupDestination"
} else {
    if (-not (Test-Path $backupDestination)) {
        Write-Host "备份目标路径不存在,正在创建: $backupDestination"
        New-Item -ItemType Directory -Path $backupDestination | Out-Null
        if (-not (Test-Path $backupDestination)) {
            Write-Error "创建备份目标路径失败: $backupDestination"
            exit 1
        }
    }
}

# 创建或更新备份策略
try {
    Write-Host "正在配置备份策略..."
    
    # 如果存在同名策略,先删除
    if (Get-WBPolicy -Name $backupPolicyName -ErrorAction SilentlyContinue) {
        Remove-WBPolicy -Name $backupPolicyName -Force
    }
    
    # 创建新的备份策略
    $policy = New-WBPolicy -Name $backupPolicyName
    
    # 添加需要备份的项目
    foreach ($item in $backupItems) {
        $volume = Get-WBVolume -VolumePath $item
        Add-WBVolume -Policy $policy -Volume $volume
    }
    
    # 配置备份目标
    if ($isNetworkDestination) {
        $backupLocation = New-WBBackupTarget -NetworkPath $backupDestination
    } else {
        $backupLocation = New-WBBackupTarget -VolumePath $backupDestination
    }
    Add-WBBackupTarget -Policy $policy -Target $backupLocation
    
    # 配置备份类型为完整备份
    Set-WBPolicy -Policy $policy -BackupType Full
    
    # 配置备份保留策略
    Set-WBPolicy -Policy $policy -RetentionPeriod $retentionPolicy
    
    # 保存备份策略
    Save-WBPolicy -Policy $policy
    
    Write-Host "备份策略配置完成"
}
catch {
    Write-Error "配置备份策略时出错: $_"
    exit 1
}

# 执行备份
try {
    Write-Host "开始执行备份任务..."
    $policy = Get-WBPolicy -Name $backupPolicyName
    Start-WBBackup -Policy $policy -Async
    
    # 等待备份完成(最长等待24小时)
    $timeout = New-TimeSpan -Hours 24
    $stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
    
    do {
        $status = Get-WBJob -Previous 1
        if ($status.JobState -eq "Completed") {
            Write-Host "备份任务成功完成"
            exit 0
        }
        if ($status.JobState -eq "Failed") {
            Write-Error "备份任务失败: $($status.ResultMessage)"
            exit 1
        }
        Start-Sleep -Seconds 60
    } while ($stopwatch.Elapsed -lt $timeout)
    
    Write-Error "备份任务超时"
    exit 1
}
catch {
    Write-Error "执行备份时出错: $_"
    exit 1
}
打赏
宝塔面板MySql进程守护脚本解决宝塔mysql数据库自动停止问题
上一篇
Windows Server 2012进程监控脚本监控指定进程的运行状态检测到异常时通过邮件发送告警通知
下一篇
博主索奈
Sonay
28 文章
0 评论
0 收藏
生成中...
二维码标题