You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何阻止IIS站点及应用池在重启或iisreset后自动启动?

解决Windows Server 2012 R2 IIS 8.5脚本停止站点/应用池后重启自动恢复的问题

我之前在维护Windows Server 2012 R2上的IIS 8.5服务器时,正好碰到过一模一样的问题!用Stop-WebAppPoolStop-Website命令把站点和池停了进入维护模式,结果一执行iisreset或者重启服务器,它们居然自动启动了,但手动在IIS控制台停止就不会出现这个情况——当时也纳闷了好久,后来才搞懂根源。

问题根源

核心原因是:PowerShell的Stop-WebAppPoolStop-Website只是临时停止运行中的实例,并没有把“停止状态”持久化到IIS的核心配置文件里

而你手动在IIS管理控制台点击停止时,控制台会做两件事:

  1. 停止当前运行的站点/应用池进程
  2. 自动修改applicationHost.config配置文件中对应站点的serverAutoStart和应用池的autoStart属性为false

这样重启或者iisreset后,IIS读取配置时就知道要保持停止状态;但脚本的Stop命令只做了第一步,没改配置,所以IIS重启后还是按照默认的autoStart=true(哪怕你设置了Start Mode为OnDemand,这个属性依然控制着是否自动启动)来启动站点和池。

解决方案:持久化停止状态

要解决这个问题,你需要在停止站点/池的同时,修改IIS的持久化配置,保证重启后状态不变。这里有两种常用方法:

方法1:用PowerShell的Set-WebConfigurationProperty命令

这是最贴合你的脚本场景的方式,直接在PowerShell里完成配置修改+停止操作:

# 替换成你的站点名称
$siteName = "YourTargetSite"
# 替换成你的应用池名称
$appPoolName = "YourTargetAppPool"

# 1. 修改站点配置,禁用自动启动
Set-WebConfigurationProperty -Filter "/system.applicationHost/sites/site[@name='$siteName']" -Name serverAutoStart -Value $false

# 2. 修改应用池配置,禁用自动启动
Set-WebConfigurationProperty -Filter "/system.applicationHost/applicationPools/add[@name='$appPoolName']" -Name autoStart -Value $false

# 3. 停止当前运行的站点和应用池
Stop-Website -Name $siteName
Stop-WebAppPool -Name $appPoolName

方法2:用appcmd命令

如果你习惯用IIS的原生命令行工具,也可以用appcmd来修改配置:

# 禁用站点自动启动
appcmd set site "YourTargetSite" /serverAutoStart:false

# 禁用应用池自动启动
appcmd set apppool "YourTargetAppPool" /autoStart:false

# 停止站点和池
Stop-Website -Name "YourTargetSite"
Stop-WebAppPool -Name "YourTargetAppPool"

恢复正常状态

当维护完成需要恢复时,只需要把配置改回true,然后启动站点和池即可:

# 恢复站点自动启动
Set-WebConfigurationProperty -Filter "/system.applicationHost/sites/site[@name='$siteName']" -Name serverAutoStart -Value $true

# 恢复应用池自动启动
Set-WebConfigurationProperty -Filter "/system.applicationHost/applicationPools/add[@name='$appPoolName']" -Name autoStart -Value $true

# 启动站点和池
Start-Website -Name $siteName
Start-WebAppPool -Name $appPoolName

验证配置是否生效

你可以打开C:\Windows\System32\inetsrv\config\applicationHost.config文件,找到对应的站点和应用池节点,确认serverAutoStartautoStart属性已经变成false,这样就可以放心重启服务器了。


内容的提问来源于stack exchange,提问作者Jeff Scott

火山引擎 最新活动