用任务计划程序实现windows服务器自动健康自检,核心是封装powershell脚本检查磁盘空间、关键服务、网络连通性及资源使用率,并通过高可靠性计划任务(双触发器+最高权限+失败重试)静默运行,结果写入轮转日志并触发邮件或webhook告警。
用任务计划程序实现windows服务器自动健康自检,核心是把检查逻辑封装成可执行脚本(如powershell或bat),再通过计划任务在固定时间或系统启动时静默运行,并将结果记录或通知。关键不在“能不能”,而在于“是否可靠执行”和“结果是否可观测”。
一、设计一个轻量但覆盖关键项的自检脚本
健康检查不需要大而全,重点盯住服务器最易出问题的几个维度:磁盘空间、服务状态、网络连通性、CPU/内存使用率。推荐用PowerShell编写,原生支持系统信息获取,无需额外依赖。
- 检查C盘剩余空间是否低于10GB:
Get-PSDrive C | Where-Object { $_.Free / 1GB -lt 10 } - 验证关键服务(如w3svc、spooler)是否正在运行:
Get-Service w3svc, spooler | Where-Object Status -ne 'Running' - 测试核心地址连通性(如网关、DNS、内部API端点):
Test-NetConnection 192.168.1.1 -Port 443 -WarningAction SilentlyContinue - 记录当前时间、主机名、检查结果到日志文件,路径建议用绝对路径如
C:\logs\healthcheck.log
二、创建高可靠性的计划任务
不能只靠“每天执行一次”,必须确保任务能脱离用户登录独立运行,且失败后有补救机制。
- 在“创建任务”(非“基本任务”)中,“常规”选项卡勾选【不管用户是否登录都要运行】和【使用最高权限运行】
- 触发器设为“每天”,起始时间避开系统启动高峰(例如延迟5分钟),同时再加一个“系统启动时”触发器——双保险防重启漏检
- 操作类型选“启动程序”,程序填
powershell.exe,参数填-ExecutionPolicy Bypass -File "C:\scripts\healthcheck.ps1",起始于填C:\scripts\ - “条件”页取消勾选【只有在计算机使用交流电源时才启动此任务】(服务器通常不插电池)
- “设置”页勾选【如果任务失败,按以下间隔重新启动】,设为10分钟,最多重试3次;并勾选【如果任务运行时间超过】设为5分钟,防脚本卡死
三、让结果真正有用:日志+告警
光执行不反馈等于没做。自检的价值在于“早发现、早干预”。
- 脚本末尾加判断:若发现异常项,用
Send-MailMessage发邮件给运维邮箱,或调用企业微信/钉钉机器人Webhook推送简要告警 - 日志文件按日期轮转,比如用
$logPath = "C:\logs\healthcheck_$(Get-Date -Format 'yyyy-MM-dd').log",避免单文件无限增长 - 可在任务“设置”页勾选【运行任务时,如果该任务已在运行,请勿启动新实例】,防止多个检查进程堆积
四、验证与维护要点
上线前务必手动右键任务→“运行”,观察脚本是否真能执行、日志是否生成、告警是否触发。后续注意:
- 每季度检查一次任务状态:在“历史记录”页看最近10次执行是否都显示“已完成(0x0)”
- 脚本路径、服务名、IP等硬编码项变更后,必须同步更新任务中的参数
- 若服务器启用了Windows Defender实时防护,需将脚本所在目录加入排除列表,否则可能拦截PowerShell执行











