PowerShell脚本实现Windows服务自动重试与报警,核心是循环检测服务状态、延时重试(如3–5次,每次Sleep 5秒)、失败后通过邮件/Send-MailMessage、Webhook/Invoke-RestMethod或本地弹窗+日志告警,并记录服务名、时间、错误信息;需用NSSM封装为服务以保障自启与上下文稳定。
windows 服务脚本要实现自动重试与报警,核心是用 powershell 或批处理封装服务控制逻辑,并加入错误检测、延时重试和外部通知机制。关键不在“启动服务”,而在“服务异常时能自主恢复并告知人”。
服务状态检测与基础重试逻辑
不能只执行 Start-Service 就算完。需循环检查服务实际运行状态(而非仅命令返回值),并设定最大重试次数和间隔。
- 用
Get-Service -Name "YourServiceName"获取Status属性,判断是否为Running - 每次失败后用
Start-Sleep -Seconds 5延迟,避免密集重试打满资源 - 建议最多重试 3–5 次;超过即认定启动失败,触发报警
- 注意:某些服务启动慢(如 Java 应用),首次查状态可延迟 10 秒再开始轮询
邮件/消息报警的轻量接入方式
无需部署专用监控平台,用系统自带或通用协议快速发出告警。
- 发邮件:调用
Send-MailMessage(需配置 SMTP 服务器,支持 Outlook/腾讯企业邮箱等) - 发企业微信/钉钉:用
Invoke-RestMethod向其 Webhook 地址 POST JSON 消息(需提前在群中开通机器人) - 本地弹窗+日志:对无网络环境,可用
[System.Windows.Forms.MessageBox]::Show()提示,并写入EventLog或文本日志 - 报警内容至少包含:服务名、失败时间、重试次数、最后错误信息(
$Error[0].Exception.Message)
作为 Windows 服务长期运行的脚本包装
单纯双击运行的脚本无法自启、易被误关。需转为真正的 Windows 服务进程。
Windows 桌面自动化技能,支持鼠标控制(移动/点击/拖拽/滚轮/截图)、键盘输入(文字输入/按键/组合键)、窗口管理(查找/聚焦/最大化/最小化/关闭/移动)、截图并发送文件。提供两种截图方式:Python pyautogui 截图(集成在自动化流程中)和 PowerShell + .NET 零依赖截图(支持区域截图和多显示器)。当用户需要自动化 Windows 桌面操作、控制鼠标键盘、管理窗口、执行 GUI 自动化任务、截图发送文件时使用。
- 推荐使用 NSSM(Non-Sucking Service Manager):免费、稳定、支持标准服务生命周期管理
- 将 PowerShell 脚本保存为 .ps1,用 NSSM 注册为服务,设置“服务失败时重启” + “延迟 30 秒后重启”双重保险
- PowerShell 脚本开头加
Set-ExecutionPolicy Bypass -Scope Process -Force避免策略拦截 - 日志路径建议写入固定位置(如
C:\Logs\MyService\),并按日期轮转,方便排查
常见陷阱与绕过技巧
很多脚本在测试时正常,上线就失效——问题常出在权限、上下文或环境变量上。
- 服务默认以
LocalSystem运行,不加载用户环境变量(比如 JAVA_HOME、PATH 中的自定义路径),需在脚本中显式设置 - GUI 交互类操作(如弹窗、调用浏览器)在服务会话中会被屏蔽,务必禁用或改用日志/消息通知
- PowerShell 脚本被杀毒软件拦截?签名不可行时,改用
powershell.exe -ExecutionPolicy Bypass -File "xxx.ps1"启动 - 服务依赖其他服务(如 SQL Server)?用
Get-Service -Name "MSSQLSERVER" | Where-Object {$_.Status -eq "Running"}先校验依赖项










