在多网站、多环境的 Windows IIS 服务器上,网站配置是最关键的数据之一。配置丢失可能导致全部网站无法访问,而重新逐一配置费时费力。因此,做好 IIS 配置的定期自动备份非常重要。
本文介绍一套无人值守、每日自动备份 IIS 配置、保留最近 N 天历史、压缩归档、集中存放到自定义目录的完整方案。
一、备份方案目标
-
只备份 IIS 配置,不包含网站文件和数据库
-
所有备份不占用 C 盘,全部存放到指定备份盘
-
每天定时自动执行,无需人工干预
-
生成三类备份内容:
-
官方配置备份替代文件夹(完整复制 IIS 配置文件夹)
-
裸配置文件拷贝(单独提取 applicationHost.config,便于人工查看或紧急替换)
-
压缩包归档(打包成 zip 文件,便于存档、迁移)
-
-
自动清理超过 N 天的旧备份,节省空间
-
保留操作日志,便于追溯备份历史
二、实现思路
IIS 的配置主要保存在:
C:\Windows\System32\inetsrv\config\
其中关键文件是 applicationHost.config
,其余如 Administration.config
、Redirection.config
主要用于管理和重定向功能。完整复制该目录即可得到 IIS 的全部站点、应用程序池等配置。
我们使用 PowerShell 脚本完成以下操作:
-
创建按日期命名的备份目录
-
复制官方 IIS 配置文件夹到备份目录
-
复制裸
applicationHost.config
文件 -
将整个目录压缩成 zip 文件
-
删除超过 N 天的老备份
-
写入日志,记录每次备份状态
最后,将脚本加入 Windows 任务计划程序,设定每天自动运行。
三、完整 PowerShell 脚本
# =========================================
# 自动 IIS 配置备份脚本(每日运行 + 自动清理)
# =========================================
# 配置
$backupRoot = "I:\IIS备份" # 备份根目录
$retentionDays = 30 # 保留最近多少天备份
$logFile = Join-Path $backupRoot "IIS_Backup.log"
$date = Get-Date -Format "yyyyMMdd_HHmmss"
$backupName = "IIS_Config_$date"
$backupDir = Join-Path $backupRoot $backupName
# 创建备份目录
if (!(Test-Path $backupDir)) { New-Item -ItemType Directory -Path $backupDir | Out-Null }
# 写日志函数
function Write-Log($msg){
$time = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$line = "$time `t $msg"
Add-Content -Path $logFile -Value $line
Write-Host $line
}
Write-Log "=== 开始 IIS 备份 ==="
# 1. 复制 IIS 配置文件夹(官方备份替代)
$srcConfigFolder = "$env:windir\System32\inetsrv\config"
$dstConfigFolder = Join-Path $backupDir "IIS_Official_Backup"
Copy-Item $srcConfigFolder $dstConfigFolder -Recurse -Force
Write-Log "官方备份文件夹已生成:$dstConfigFolder"
# 2. 裸拷贝 applicationHost.config
$dstConfigFile = Join-Path $backupDir ("applicationHost_" + $date + ".config")
Copy-Item "$srcConfigFolder\applicationHost.config" $dstConfigFile -Force
Write-Log "裸配置文件备份完成:$dstConfigFile"
# 3. 压缩整个备份目录
$zipFile = Join-Path $backupRoot ($backupName + ".zip")
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory($backupDir, $zipFile)
Write-Log "备份目录压缩完成:$zipFile"
# 4. 自动清理 N 天前备份(目录 + 压缩包)
Get-ChildItem $backupRoot -Force | Where-Object {
($_.LastWriteTime -lt (Get-Date).AddDays(-$retentionDays)) -and ($_.Name -match "IIS_Config_")
} | Remove-Item -Recurse -Force
Write-Log "已清理 $retentionDays 天前老备份"
Write-Log "=== IIS 备份完成 ===`n"
四、部署与使用
-
将脚本保存为:
I:\IIS备份\IIS_Backup_Auto.ps1
-
打开 任务计划程序 → 创建基本任务:
-
触发器:每天指定时间(如凌晨 2:00)
-
操作:启动程序 →
powershell.exe
-
参数:
-ExecutionPolicy Bypass -File "I:\IIS备份\IIS_Backup_Auto.ps1"
-
勾选 使用最高权限运行
-
-
测试运行一次,确认:
-
备份盘中生成时间戳目录和 zip 压缩包
-
日志文件
IIS_Backup.log
正常记录
-
五、恢复方法
若需要在另一台服务器恢复 IIS 配置:
-
解压某次备份的 zip 包
-
替换新服务器的:
C:\Windows\System32\inetsrv\config\
内容为备份中的
IIS_Official_Backup
内容(注意事先备份现有配置) -
重新启动 IIS 服务:
iisreset
-
验证站点是否正常加载
六、总结
通过本文方案,您可以实现:
-
IIS 配置每日自动化备份
-
官方备份替代 + 裸配置文件双保险
-
自定义备份目录,避免 C 盘占用
-
自动压缩、自动清理、日志追踪
-
简单可控,恢复快速,适合多网站环境
这套方案可以大幅提升 IIS 运维安全性和灾难恢复速度,建议所有运行在 Windows Server 上的 IIS 环境都部署此方案。