如何通过PowerShell在IIS连接级别批量重启站点?
解决IIS连接级别彻底重启的PowerShell方案
你的现有命令仅重启了W3SVC服务和站点,但未彻底重置IIS的进程激活服务(WAS),也未同步处理应用池的启停,因此无法达到连接级别重启的效果(即IIS连接节点的「启动/停止」按钮置灰、仅「重启」可用)。
正确的PowerShell执行步骤
要实现彻底的连接级别重启,需要完整启停IIS核心服务及关联的应用池、站点,具体命令如下:
# 1. 停止所有IIS站点 Get-ChildItem -Path IIS:\Sites | ForEach-Object { Stop-WebSite $_.Name } # 2. 停止所有应用池(含指定的SharePoint应用池) Get-ChildItem -Path IIS:\AppPools | ForEach-Object { Stop-WebAppPool $_.Name } # 3. 停止IIS核心服务:先停W3SVC(依赖WAS),再停WAS Stop-Service W3SVC -Force Stop-Service WAS -Force # 4. 重启核心服务:先启动WAS,再启动W3SVC(W3SVC依赖WAS) Start-Service WAS Start-Service W3SVC # 5. 启动所有应用池 Get-ChildItem -Path IIS:\AppPools | ForEach-Object { Start-WebAppPool $_.Name } # 6. 启动所有IIS站点 Get-ChildItem -Path IIS:\Sites | ForEach-Object { Start-WebSite $_.Name }
关键说明
- 必须启停WAS服务:WAS(Windows Process Activation Service)是IIS的进程管理核心,负责应用池的进程调度和连接管理,仅重启W3SVC无法彻底清除现有连接状态。
- 应用池同步启停:站点依赖应用池运行,先停应用池再停站点,启动时反之,能避免残留的进程连接。
- 服务启停顺序:W3SVC依赖WAS服务,必须先停W3SVC再停WAS;启动时先启动WAS,待其就绪后再启动W3SVC,确保服务依赖关系正常。
执行上述命令后,IIS连接节点的「启动/停止」按钮会处于置灰状态,仅「重启」按钮可用,说明已完成连接级别的彻底重启。
内容的提问来源于stack exchange,提问作者Sun
相关产品推荐
相关产品推荐

