背景
在工作中经常会使用计划任务执行 Powershell 脚本,同时又需要基于执行的脚本及时反馈结果给相关人员。过去是通过 Powershell 发送邮件通知,但很多时候这类消息容易被忽略,没有及时沟通类的消息软件高效。
本篇以
企业微信机器人
为例,简单记录使用 Powershell 发送消息给企业微信机器人,便于后期集成在其他脚本中,以实现及时反馈运行结果的需求。如何创建机器人不在本文范围,请自行搜寻。
实现方式
$Webhook = "https://qyapi.weixin.qq.com/xxx" # 这里填写机器人的Webhook 地址即可
Invoke-WebRequest $Webhook -Method POST -ContentType "application/json;charset=utf-8" -Body '{"msgtype": "text","text": {"content": "【测试企业微信机器人消息】"}}'
效果预览

实战
这里有个简单的场景,默认计算机加域以后都会在 Computers
这个容器里,如果不移动至相应的 OU,则无法应用企业的相关GPO策略。我们可以定期执行脚本去检查 Computers 的计算机,如果有就通知相关人员进行移动。
脚本如下:
# Send message
$webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=*********"
$PClist = Get-ADComputer -SearchBase "CN=Computers,DC=ITPro,DC=cc" -Filter 'Enabled -eq "True"' | Select-Object Name
$PCNames = $PClist.Name
$PCNumb = ($PClist.Name).count
$content = Write-Output "一共有"$PCNumb"台计算机加入域请尽快移动至相关OU,清单如下:`n "$PCNames""
$body = "{
`"msgtype`":`"text`",
`"text`":{
`"content`":`"$content`",
`"mentioned_list`":[`"jason`"]
}
}"
$chinese = [System.Text.Encoding]::UTF8.GetBytes($body) #这里是解决中文编码问题的即发送中文消息时候使用。
if ($PCNumb -gt 0) {
Invoke-RestMethod $webhook -ContentType "application/json" -Method Post -Body $chinese
}
else {
exit
}
执行结果:
机器人消息也支持
MarkDown
格式,让输出的消息更加美观