IIS导出配置的核心答案:在Windows服务器上,通过IIS管理器或appcmd命令将站点、应用程序池及绑定配置完整导出为XML文件,用于备份或迁移,其中IIS管理器图形化操作最简单,适合单服务器场景。
IIS导出配置的三种主流方式对比
不同场景下,IIS导出配置的路径差异较大,行业共识认为,图形化界面适合初学者,命令行适合批量自动化,第三方工具则用于跨版本迁移,下面逐一拆解。
IIS管理器直接导出站点配置
这是最直观的IIS导出配置方法,适合单站点或少量站点备份。
- 打开“服务器管理器”,点击“工具”菜单,选择“Internet Information Services (IIS) 管理器”
- 在左侧连接栏选中服务器节点,右键点击“配置编辑器”,或者直接选中目标站点
- 导航到“配置编辑器”后,在“节”下拉框中选择
system.applicationHost/sites - 点击右下角“复制”按钮,将XML配置片段复制到剪贴板,粘贴保存为
.xml文件即可
这个操作只导出站点相关配置,不包含应用程序池设置,如果需要完整迁移,必须同时导出applicationHost.config文件。
使用appcmd命令导出完整配置
微软官方提供的appcmd.exe工具位于C:WindowsSystem32inetsrvappcmd.exe,它支持更精细的IIS导出配置操作。
导出全部配置:
C:WindowsSystem32inetsrvappcmd.exe list site /config > D:backupsites.xml C:WindowsSystem32inetsrvappcmd.exe list apppool /config > D:backupapppools.xml
导出单个站点带所有子配置:
appcmd list site "默认网站" /config > D:backupdefaultsite.xml
导出时保留密码等敏感信息:
默认情况下,appcmd导出的配置会隐藏应用程序池的密码,需要追加/text:参数强制显示加密内容:
appcmd list apppool /config /text: > D:backupapppools_full.xml

行业专家指出,命令行的最大优势是可在PowerShell脚本中循环处理所有站点,这是图形界面无法比拟的。
直接复制applicationHost.config文件
所有IIS配置的核心都存在C:WindowsSystem32inetsrvconfigapplicationHost.config文件中。手动复制这个文件是最彻底的IIS导出配置方式,包含了站点、应用程序池、虚拟目录、绑定、认证设置等全部内容。
具体操作路径:
- 停止W3SVC服务,或使用
net stop WAS命令避免文件锁占用 - 复制
applicationHost.config到备份目录 - 重启IIS服务:
net start W3SVC
补充一点:不要遗漏C:WindowsSystem32inetsrvconfigredirection.config文件,它记录了IIS配置的存放路径。
IIS导出配置后如何正确恢复迁移
导出只是第一步,恢复时经常遇到路径偏移、权限丢失、绑定冲突等问题,这里分享一套经过验证的恢复流程。
恢复前准备:检查目标服务器版本
IIS 8.5(Windows Server 2012 R2)导出的配置文件,不建议直接导入IIS 10(Windows Server 2019/2026)。跨主版本迁移时,请先在新服务器上手动创建同名站点,再导入配置,据统计,直接跨版本导入失败率较高,因为模块架构有变化。
恢复操作:从XML文件导入
使用appcmd命令导入站点配置:
appcmd add site /in < D:backupsites.xml
导入应用程序池:
appcmd add apppool /in < D:backupapppools.xml
如果XML里已有相同ID的站点,会提示冲突,需要先删除或修改现有配置。
恢复后验证:检查绑定和SSL证书
- 在IIS管理器里检查所有站点的“绑定”列表,确保IP地址、端口、主机头完全一致
- 检查SSL证书是否已导入到“服务器证书”模块,否则https绑定会显示异常
- 使用命令
appcmd list site确认所有站点状态为“Started”

IIS导出配置时的高频问题排查
实际运维过程中,常遇到导出成功但恢复不了的情况,以下问题按出现频率排序。
| 故障现象 | 常见原因 | 解决方案 |
|---|---|---|
| 导出文件包含乱码 | 编码格式错误 | 使用/xml参数指定输出格式,避免默认Unicode编码问题 |
| 恢复时报“配置错误” | 缺少URL重写模块或ARR模块 | 先安装对应IIS模块,再执行导入操作 |
| 密码显示为“” | appcmd默认脱敏 | 添加/text:参数重新导出 |
| 端口绑定冲突 | 目标服务器端口被占用 | 用netstat -ano找出占用进程,或修改导入XML中的端口值 |
具体操作:修改导出的XML文件
很多情况下,你不想修改目标服务器,而是直接改导出文件,比如把站点端口从8080改成8081:
<binding protocol="http" bindingInformation=":8080:hostname" />
将bindingInformation里的端口改成8081,保存后重新导入即可。注意修改后用appcmd add site /in导入时,要确保XML文件格式完整,尾部闭合标签不能缺失。
IIS导出配置给网站搬家时的注意事项
网站从旧服务器迁移到新服务器,IIS导出配置只是其中一环,需要同时考虑以下几点:
- 网站文件:导出配置后,还需单独打包站点物理路径下的文件,比如
C:inetpubwwwroot你的站点文件夹 - 应用程序池的.NET版本:检查目标服务器是否安装了对应的.NET运行时,否则导入成功后站点会报500错误
- 虚拟目录:如果站点下挂了多个虚拟目录,导出配置会包含
<virtualDirectory>节点,但物理路径必须在新服务器上真实存在 - 权限设置:配置文件中的
applicationPoolSid和本地用户权限不会自动迁移,重新分配NTFS权限是必需步骤
使用PowerShell脚本自动化IIS导出配置

对于有多台服务器运维需求的场景,手动操作效率太低,可以用一行PowerShell命令批量导出:
Import-Module WebAdministration Get-ChildItem IIS:Sites | Export-IISConfiguration -PhysicalPath D:BackupSiteConfig
系统默认没有Export-IISConfiguration命令,需要加载C:WindowsSystem32inetsrvappcmd.exe的别名,或者直接用.NET方法读取配置,实际生产环境中,多数管理员习惯写一个批处理脚本调用appcmd,每台服务器执行一次,生成带时间戳的文件夹。
示例脚本:
@echo off set BACKUP_DATE=%date:~0,4%%date:~5,2%%date:~8,2% mkdir D:IIS_Backup_%BACKUP_DATE% C:WindowsSystem32inetsrvappcmd.exe list site /config > D:IIS_Backup_%BACKUP_DATE%sites.xml C:WindowsSystem32inetsrvappcmd.exe list apppool /config /text: > D:IIS_Backup_%BACKUP_DATE%apppools.xml
这个脚本可以作为计划任务每周运行一次,确保配置变更可追溯。
IIS导出配置时常见疑问解答
IIS导出配置能否直接用于IIS 6或IIS 7迁移?
不能直接使用,IIS 6的配置是metabase.xml格式,IIS 7以上才统一使用applicationHost.config,从IIS 6迁移建议使用微软官方的IIS Migration Tool,而IIS 7到IIS 10之间的配置文件结构基本兼容,但需要检查<globalModules>列表是否一致。
导出的配置文件能保护应用程序池密码吗?
默认情况下,appcmd导出的配置不会泄密码,而是显示为,只有添加/text:参数才会显示加密后的密文。这个密文绑定原服务器机器密钥,换机器后无法直接使用,需要在导入后重新设置应用程序池的身份凭据。
每次修改IIS配置后都需要重新导出吗?
不需要每次手动导出,IIS运行时会对applicationHost.config自动保存变更,但不会生成历史版本,建议在下列节点重新导出:站点绑定变更、应用程序池参数调整、SSL证书更新、服务器计划维护前,日常小改动不必频繁导出,定期备份即可。
