服务公告
IIS 自动化-星耀云
发布时间:2026-04-28 10:02
一、前言
干了10年运维,手动管理IIS站点简直是噩梦——环境部署要2小时,迁移10个网站要加班到半夜,每次重装系统从头配置更是崩溃。Windows Server的IIS其实自带强大的自动化能力,PowerShell+WebAdministration模块能完成几乎所有图形界面的操作。这篇聊透IIS自动化,从单站点到批量部署,手把手给出生产级脚本。
二、操作步骤
步骤1:确认IIS管理模块可用
开始之前先验证WebAdministration模块是否加载,这是所有IIS自动化操作的基础。
预期输出:
步骤2:创建Application Pool(应用池)
应用池是IIS的核心隔离单元,自动化脚本里先创建它,后续绑定网站时直接引用。
预期输出:
步骤3:创建Website并绑定物理路径
网站创建时同步设置物理路径、绑定协议、应用池,一个命令搞定。
预期输出:
步骤4:配置HTTPS绑定(SSL证书)
生产环境必须走HTTPS,这步演示如何用已有证书创建443绑定。
⚠️ 注意:执行此操作需要服务器上已安装有效的SSL证书
预期输出:
步骤5:批量配置站点参数(默认文档、认证、压缩)
站点创建后需要统一配置安全策略和性能参数,用批量脚本一次性设置到位。
预期输出:
步骤6:IIS配置备份与导出
⚠️ 重要:生产环境变更前务必执行备份,防止配置错误导致服务中断
预期输出:
步骤7:批量部署脚本封装(生产级模板)
把前面的操作封装成函数,实现一行命令部署整套站点,包含异常处理和日志记录。
预期输出:
步骤8:多服务器远程批量操作
管理多台IIS服务器时,用PowerShell Remoting实现一台控全局,适合中大型运维场景。
⚠️ 注意:远程操作需要WinRM服务运行,且执行账号有目标服务器管理员权限
预期输出:
三、常见问题FAQ
Q1: 报错"Import-Module WebAdministration"失败,模块找不到怎么办?
这是因为IIS管理脚本工具没装。Windows Server上跑这个命令没反应的直接去服务器管理器→添加角色→Web服务器(IIS)→勾选"IIS管理脚本和工具"。别问我怎么知道这个坑的,有次线上服务器换了镜像,部署脚本跑不通,查了半天才发现是这玩意儿没装。装完记得重开PowerShell再试。
Q2: 用PowerShell创建的网站能直接在IIS管理器里看到吗?会不会有兼容性问题?
完全兼容,图形界面和命令行操作的是同一个配置数据库(applicationHost.config),没有任何区别。IIS管理器里看到的和你用Get-Website查出来的永远是一致的。有个需要注意的地方:图形界面改了配置后,PowerShell这边要重新Import-Module才能读到最新状态,别以为卡了。另外如果你用PowerShell远程操作,某些服务器需要设置TrustedHosts才能连上。
Q3: appcmd备份和PowerShell备份哪个更靠谱?
老实说,都用上更保险。appcmd备份的是iisconfig格式,恢复的时候直接appcmd restore backup就行,适合紧急回滚场景。PowerShell导出XML的好处是可以放进Git做版本管理,diff能看到每次改了什么。我现在的做法是:自动化脚本里同时执行两种备份,appcmd做快速恢复用,XML文件提交到配置仓库做审计追踪。两种备份策略配合才是生产级做法。
Q4: 批量部署的时候,怎么判断是新建还是更新已有站点?
上面示例脚本里用了-ErrorAction SilentlyContinue配合Get-Website判断,这种方式有个问题:站点不存在时会抛异常被静默捕获。更稳的做法是用Test-Path "IIS:\Sites\$SiteName",不抛异常直接返回布尔值。更新已有站点时建议先检查配置差异,别直接覆盖,要不会把运行中的配置改乱了。我一般会在脚本里加个-WhatIf参数预览要改的内容,确认无误再加-Confirm才真正执行。
Q5: 能不能用这些脚本管理Azure App Service或AWS的Windows实例?
本地IIS和云上的管理接口完全不同。Azure App Service用的是Kudu和REST API,PowerShell里用Invoke-RestMethod调Azure PowerShell或者Az模块。AWS的Windows EC2还是原生IIS,但得先解决远程连接问题——Session Manager或者Direct Connect之类的。核心思路不变:拿到管理凭证,找对API端点,剩下的就是脚本逻辑的事。
四、总结
核心要点回顾:
- PowerShell的WebAdministration模块是IIS自动化的基石,掌握Import-Module、Get-Website、New-WebAppPool这几个核心Cmdlet就能应对80%场景
- 生产环境必须先备份再操作,appcmd备份+XML导出双重机制缺一不可
- 批量部署脚本要封装成函数并加入异常处理和日志,-WhatIf参数是防止手滑的保命符
- 多服务器管理用Invoke-Command实现远程执行,配合WinRM和TrustedHosts配置
- SSL证书绑定用Thumbprint定位,Get-ChildItem的筛选条件要写精确,避免绑定到错误证书
延伸阅读:
- Microsoft官方文档:WebAdministration模块Cmdlet完整参考
- Microsoft IIS Team Blog:生产环境IIS配置最佳实践
- PowerShell Gallery:IIS相关的community模块(如IISDeployment这个包)
相关推荐
上一篇: VsCode-星耀云
下一篇: React 性能优化-星耀云