可用PowerShell脚本结合Windows任务计划程序实现关键服务自动巡检与异常告警:定期查询服务状态,筛选非Running服务并记录日志;对可安全重启的服务自动执行Start-Service恢复;通过任务计划定时运行脚本;支持邮件、Webhook或事件日志告警。
可以用powershell脚本结合windows任务计划程序,实现对关键服务的自动巡检和异常告警。核心是定期查询服务状态、识别异常(如stopped、pause pending)、并按需通知或自动恢复。
编写基础监控脚本
以下脚本检查指定服务列表,记录状态并输出异常项:
- 使用 Get-Service 获取服务对象,通过 Status 属性判断运行状态
- 支持批量检查多个服务(如
'Spooler','WinRM','Dhcp'),避免逐个写命令 - 用 Where-Object 筛选非
Running的服务,并输出时间戳、服务名和当前状态 - 可将结果追加到日志文件(如
Out-File -Append),便于追溯
示例片段:
Get-Service -Name 'Spooler','WinRM' | Where-Object {$_.Status -ne 'Running'} | Select-Object Name,Status,@{n='Time';e={Get-Date}} | Export-Csv -Path "C:\Logs\ServiceAlert.csv" -Append -NoTypeInformation添加自动恢复逻辑
对已知可安全重启的服务,脚本可在检测到异常后尝试自动启动:
Windows 桌面自动化技能,支持鼠标控制(移动/点击/拖拽/滚轮/截图)、键盘输入(文字输入/按键/组合键)、窗口管理(查找/聚焦/最大化/最小化/关闭/移动)、截图并发送文件。提供两种截图方式:Python pyautogui 截图(集成在自动化流程中)和 PowerShell + .NET 零依赖截图(支持区域截图和多显示器)。当用户需要自动化 Windows 桌面操作、控制鼠标键盘、管理窗口、执行 GUI 自动化任务、截图发送文件时使用。
- 用 Start-Service 启动服务,配合 -ErrorAction SilentlyContinue 避免报错中断
- 启动后再次检查状态,确认是否成功;失败则记录到告警日志
- 建议对关键系统服务(如
EventLog)启用恢复,但谨慎对待依赖复杂或需手动干预的服务(如某些数据库服务)
配置定时任务触发
使用 Task Scheduler 实现周期执行,比轮询更稳定高效:
- 新建基本任务,触发器设为“每天”或“每15分钟”,根据业务重要性调整频率
- 操作设置为“启动程序”,程序填
powershell.exe,参数填-File "C:\Scripts\Check-Services.ps1" - 务必勾选“不管用户是否登录都要运行”,并配置“只在本地运行”以避免凭据问题
- 建议以 SYSTEM 或具有服务管理权限的账户运行,确保有足够权限启停服务
集成简单告警机制
发现异常时及时通知运维人员,避免仅靠查日志被动响应:
- 脚本中加入 Send-MailMessage 发送邮件(需提前配置SMTP服务器)
- 或调用企业微信/钉钉 Webhook 接口推送消息(用 Invoke-RestMethod 提交JSON)
- 也可写入 Windows 事件日志(Write-EventLog),方便与集中监控平台对接
- 告警内容应包含服务名、状态、发生时间及脚本尝试的修复动作(如“已执行 Start-Service”)










