Windows Server 2012环境下网站监测自动重启IIS的PowerShell脚本需求
解决IIS偶尔停止:PowerShell监测网站连通性并自动重启服务
针对你Windows Server 2012上IIS偶尔停止的问题,我推荐用PowerShell脚本结合服务连通性检测(比单纯ping更准确——ping只能确认主机存活,无法验证网站服务是否正常)来实现自动重启。下面提供两种实用的脚本方案,你可以根据需求选择:
方案1:通过端口检测网站连通性(模拟Telnet)
这种方式检测网站的80(HTTP)或443(HTTPS)端口是否能正常响应,适合快速验证服务可用性:
# 定义目标网站和端口 $targetSite = "www.forme.com.ph" $targetPort = 80 # 如果是HTTPS服务,改成443即可 # 执行端口连通性检测 $connectionTest = Test-NetConnection -ComputerName $targetSite -Port $targetPort # 判断检测结果并执行对应操作 if (-not $connectionTest.TcpTestSucceeded) { Write-Host "$(Get-Date): 网站$targetSite端口$targetPort无法连通,开始重启IIS服务..." # 重启IIS核心服务(W3SVC),-Force参数强制终止并重启 Restart-Service -Name W3SVC -Force Write-Host "$(Get-Date): IIS服务重启完成" } else { Write-Host "$(Get-Date): 网站$targetSite端口$targetPort连通正常,无需操作" }
脚本说明:
Test-NetConnection是Windows Server 2012及以上系统自带的命令,替代传统Telnet,无需额外安装组件- 若端口检测失败(
TcpTestSucceeded返回False),则自动触发IIS服务重启 - 加入时间戳方便后续查看运行记录
方案2:通过网页请求验证网站可用性(更准确)
如果需要确认网站能正常返回内容(避免出现端口通但网页报错的情况),可以用网页请求检测:
$targetUrl = "http://www.forme.com.ph" # HTTPS服务请改成https:// $timeoutSeconds = 10 try { # 发送网页请求并设置超时时间 $response = Invoke-WebRequest -Uri $targetUrl -TimeoutSec $timeoutSeconds # 检查响应状态码是否为200(正常访问状态) if ($response.StatusCode -eq 200) { Write-Host "$(Get-Date): 网站$targetUrl响应正常,无需操作" } else { Write-Host "$(Get-Date): 网站$targetUrl返回异常状态码$($response.StatusCode),开始重启IIS..." Restart-Service -Name W3SVC -Force Write-Host "$(Get-Date): IIS服务重启完成" } } catch { # 捕获请求失败的情况(比如超时、无法连接、DNS解析失败等) Write-Host "$(Get-Date): 网站$targetUrl无法访问,错误信息:$($_.Exception.Message),开始重启IIS..." Restart-Service -Name W3SVC -Force Write-Host "$(Get-Date): IIS服务重启完成" }
脚本说明:
Invoke-WebRequest发送HTTP请求,验证网站是否能正常返回200状态码- 设置超时时间避免脚本长时间等待无响应的请求
- 捕获异常处理各种访问失败场景,覆盖更全面
如何定时运行脚本?
- 把脚本保存为
RestartIisOnFailure.ps1 - 打开任务计划程序,创建新任务:
- 触发器:设置每隔X分钟/小时执行一次(比如每5分钟,根据你的需求调整)
- 操作:选择「启动程序」,程序/脚本填
powershell.exe,添加参数填-ExecutionPolicy Bypass -File "C:\你的脚本路径\RestartIisOnFailure.ps1" - 权限:确保任务使用具有管理员权限的账户运行(重启服务需要管理员权限)
额外注意事项:
- Windows Server 2012默认的PowerShell执行策略可能限制脚本运行,所以参数里加
-ExecutionPolicy Bypass临时绕过限制 - 若你的IIS依赖其他服务(比如WAS),可以把重启命令改成
Restart-Service -Name W3SVC,WAS -Force - 可以把脚本输出写入日志文件方便排查,比如在
Write-Host语句后追加| Out-File "C:\IisMonitorLog.txt" -Append
内容的提问来源于stack exchange,提问作者hasan81




