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

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状态码
  • 设置超时时间避免脚本长时间等待无响应的请求
  • 捕获异常处理各种访问失败场景,覆盖更全面

如何定时运行脚本?

  1. 把脚本保存为RestartIisOnFailure.ps1
  2. 打开任务计划程序,创建新任务:
    • 触发器:设置每隔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

火山引擎 最新活动