脚本使用说明
# 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
}
本站部分资源来源于用户上传和网络公开信息,如有侵权请邮件联系站长:237914037@qq.com,分享目的仅供大家学习和交流,您必须在下载后24小时内删除!本站提供的源码、模板、插件等等其他资源,不包含技术服务请大家谅解! 如有链接无法下载、失效或广告,请联系管理员处理!默认解压密码为:sonay.cn