背景

在工作中经常会使用计划任务执行 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": "【测试企业微信机器人消息】"}}'

效果预览
PowerShell小技巧:通过Powershell 发送消息给企业微信机器人PowerShell小技巧:通过Powershell 发送消息给企业微信机器人

实战

这里有个简单的场景,默认计算机加域以后都会在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
}

执行结果:
PowerShell小技巧:通过Powershell 发送消息给企业微信机器人


机器人消息也支持MarkDown格式,让输出的消息更加美观

下一章,我将介绍通过 PowerShell 自动将刚加域的客户端按固定计算机命名规则来移动至对应 OU,效果如下图所示:

PowerShell小技巧:通过Powershell 发送消息给企业微信机器人

详细说明请见官方文档