Windows IIS 配置无人值守自动备份完整方案

 

在多网站、多环境的 Windows IIS 服务器上,网站配置是最关键的数据之一。配置丢失可能导致全部网站无法访问,而重新逐一配置费时费力。因此,做好 IIS 配置的定期自动备份非常重要。

本文介绍一套无人值守、每日自动备份 IIS 配置、保留最近 N 天历史、压缩归档、集中存放到自定义目录的完整方案。


一、备份方案目标

  • 只备份 IIS 配置,不包含网站文件和数据库

  • 所有备份不占用 C 盘,全部存放到指定备份盘

  • 每天定时自动执行,无需人工干预

  • 生成三类备份内容:

    1. 官方配置备份替代文件夹(完整复制 IIS 配置文件夹)

    2. 裸配置文件拷贝(单独提取 applicationHost.config,便于人工查看或紧急替换)

    3. 压缩包归档(打包成 zip 文件,便于存档、迁移)

  • 自动清理超过 N 天的旧备份,节省空间

  • 保留操作日志,便于追溯备份历史


二、实现思路

IIS 的配置主要保存在:

C:\Windows\System32\inetsrv\config\

其中关键文件是 applicationHost.config,其余如 Administration.configRedirection.config 主要用于管理和重定向功能。完整复制该目录即可得到 IIS 的全部站点、应用程序池等配置。

我们使用 PowerShell 脚本完成以下操作:

  1. 创建按日期命名的备份目录

  2. 复制官方 IIS 配置文件夹到备份目录

  3. 复制裸 applicationHost.config 文件

  4. 将整个目录压缩成 zip 文件

  5. 删除超过 N 天的老备份

  6. 写入日志,记录每次备份状态

最后,将脚本加入 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"

四、部署与使用

  1. 将脚本保存为:

    I:\IIS备份\IIS_Backup_Auto.ps1
    
  2. 打开 任务计划程序 → 创建基本任务:

    • 触发器:每天指定时间(如凌晨 2:00)

    • 操作:启动程序 → powershell.exe

    • 参数:

      -ExecutionPolicy Bypass -File "I:\IIS备份\IIS_Backup_Auto.ps1"
      
    • 勾选 使用最高权限运行

  3. 测试运行一次,确认:

    • 备份盘中生成时间戳目录和 zip 压缩包

    • 日志文件 IIS_Backup.log 正常记录


五、恢复方法

若需要在另一台服务器恢复 IIS 配置:

  1. 解压某次备份的 zip 包

  2. 替换新服务器的:

    C:\Windows\System32\inetsrv\config\
    

    内容为备份中的 IIS_Official_Backup 内容(注意事先备份现有配置)

  3. 重新启动 IIS 服务:

    iisreset
    
  4. 验证站点是否正常加载


六、总结

通过本文方案,您可以实现:

  • IIS 配置每日自动化备份

  • 官方备份替代 + 裸配置文件双保险

  • 自定义备份目录,避免 C 盘占用

  • 自动压缩、自动清理、日志追踪

  • 简单可控,恢复快速,适合多网站环境

这套方案可以大幅提升 IIS 运维安全性和灾难恢复速度,建议所有运行在 Windows Server 上的 IIS 环境都部署此方案。

No comments

公司简介

 

自1996年以来,公司一直专注于域名注册、虚拟主机、服务器托管、网站建设、电子商务等互联网服务,不断践行"提供企业级解决方案,奉献个性化服务支持"的理念。作为戴尔"授权解决方案提供商",同时提供与公司服务相关联的硬件产品解决方案。
备案号: 豫ICP备05004936号-1

联系方式

地址:河南省郑州市经五路2号

电话:0371-63520088

QQ:76257322

网站:800188.com

电邮:该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。