最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
PowerShell 脚本处理运维告警:对接钉钉及邮件通知
时间:2026-07-21 08:55:53 编辑:袖梨 来源:一聚教程网
PowerShell脚本可通过钉钉Webhook或SMTP实现运维告警自动化通知,核心是解耦检测逻辑与通知动作,用函数封装发送流程,并通过任务计划定时执行。
powershell 脚本可以直接对接钉钉 webhook 或系统邮件服务,实现运维告警的自动化通知,关键在于把告警逻辑(如检查服务状态、磁盘空间、事件日志)和通知动作解耦,用函数封装发送逻辑,便于复用和维护。
钉钉机器人通知(Webhook 方式)
钉钉群机器人需在群设置中开通并获取 Webhook 地址(含 access_token)。PowerShell 发送时需构造 JSON 请求体,使用 Invoke-RestMethod 提交 POST 请求。注意设置 Content-Type 为 application/json,并启用 TLS 1.2(部分环境默认不启用)。
- 启用 TLS 1.2:[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
- 构建消息体:支持 text、markdown、link 等类型;推荐用 markdown 显示标题+关键指标,提升可读性
- 示例字段:title(告警标题)、text(详细内容)、atMobiles(@ 手机号)、isAtAll(是否 @ 全员)
- 建议加简单错误处理:捕获 HTTP 4xx/5xx 响应,记录失败日志或重试一次
邮件通知(SMTP 方式)
使用 Send-MailMessage 是最轻量方式,适用于已配置 SMTP 服务器的环境(如公司内部 Exchange 或腾讯企业邮)。需提供 SMTP 服务器地址、端口、发件人凭证及收件人列表。
- 注意:PowerShell 6+ 中 Send-MailMessage 已被弃用,建议改用 MailKit 库(需 NuGet 安装)或调用 .NET System.Net.Mail 类型
- 发件人密码建议存于加密文件或 Windows 凭据管理器,避免明文写在脚本里
- 邮件主题建议包含告警级别(如 [CRITICAL])、来源主机名、时间戳,便于快速识别
- 正文可嵌入表格化信息(用 HTML 格式),例如磁盘使用率超过 90% 的分区列表
告警触发与通知分离设计
不要把检测逻辑和通知代码混在一起。推荐按职责拆分为:检测函数(返回布尔值 + 告警详情哈希表)、格式化函数(转成钉钉/邮件所需结构)、发送函数(独立参数化调用)。
- 例如:Check-DiskSpace 返回 @{Status='Warning'; Message='C: used 92%'; Host='SRV01'}
- 再由 Format-AlertForDingTalk 或 Format-AlertForEmail 统一转换,避免重复拼接字符串
- 主流程只需判断检测结果,决定是否调用 Send-Alert -Channel 'DingTalk' -Payload $data
- 这样新增企业微信或飞书通知时,只需补充 Format 和 Send 函数,不影响原有检测逻辑
运行与调度建议
PowerShell 脚本适合通过 Windows Task Scheduler 定时执行(如每 5 分钟检查一次),但要注意运行账户权限(需有访问 WMI、事件日志、远程主机等权限)和执行策略限制。
- 设置执行策略:本地策略常为 Restricted,可用 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 临时放开
- 任务计划中“不管用户是否登录都要运行”且勾选“使用最高权限”,避免因会话隔离导致 WMI 查询失败
- 输出日志建议重定向到文件(如 | Out-File -Append),并保留最近 7 天日志轮转
- 首次部署前,在控制台手动运行一次,确认告警能触达,再上线定时任务
相关文章
- 检疫区最后一站结膜炎与红眼区别一览 07-21
- 超大杯研究员的异常求汁欲第二章流程及单词出处 07-21
- 斗罗大陆诛邪传说什么时候上线 07-21
- 原神八重神子选精通沙还是攻击沙好 07-21
- 我不是盐神网站入口在哪 07-21
- 冒险者旅馆2全流程通关攻略是什么 07-21