PowerShell 7发送Teams通用入站Webhook时报错:Bad payload received by generic incoming webhook
PowerShell 7发送Teams通用入站Webhook时报错:Bad payload received by generic incoming webhook
嗨,我来帮你排查这个问题~
你遇到的核心问题在于变量$body里的JSON字符串多了一层不必要的单引号。仔细看你定义$body的代码:
$body = "`'{`"text`":`"mailbody`"}`'"
这样定义后,$body实际存储的内容是'{"text":"mailbody"}'(外层包裹了单引号),而Teams通用入站Webhook只接受纯JSON格式的 payload,外层的单引号会被识别为无效格式,所以才抛出“Bad payload received”的错误。而你直接写'{"text":"mailbody"}'的时候,PowerShell会把单引号当作字符串的边界,实际发送的是没有外层单引号的纯JSON内容,自然就能成功。
这里给你两种解决办法:
方法一:直接定义正确的JSON字符串
去掉外层的转义单引号,直接赋值纯JSON:
$body = '{"text":"mailbody"}' # 验证输出应该是 {"text":"mailbody"} $body # 再调用接口 Invoke-RestMethod -Method Post -ContentType 'Application/Json' -Body $body -Uri $mychat
方法二:用ConvertTo-Json生成规范JSON(推荐)
手动拼接JSON很容易出现转义错误,更稳妥的方式是先构建PowerShell哈希表,再转换为JSON:
# 先定义payload的结构 $payload = @{ text = "mailbody" } # 转换为标准JSON格式 $body = $payload | ConvertTo-Json # 调用接口 Invoke-RestMethod -Method Post -ContentType 'Application/Json' -Body $body -Uri $mychat
这种方式不仅能避免手动转义的麻烦,当你需要添加更多字段(比如富文本、附件等)时,也能保证JSON格式的正确性。
备注:内容来源于stack exchange,提问作者Chris9834




