PowerShell中如何向Microsoft Teams发送变量内容
解决PowerShell向Teams发送变量内容的问题
你遇到的核心问题是没有正确构建符合Teams Webhook要求的JSON payload,同时对PowerShell的字符串解析规则理解有误。咱们一步步拆解问题,再给出可靠的解决方案:
为什么你的尝试失败了?
- 第一种方式用了单引号包裹JSON:PowerShell中单引号字符串不会解析变量,所以
'{"text":"Write-Output $cmdOutput"}'会被原封不动当作文本发送,自然不会输出变量内容。 - 第二种和第三种直接传递变量或命令:Teams的Webhook要求接收的是
{"text": "你的内容"}格式的JSON对象,而你直接传变量值或者命令,完全不符合JSON结构,所以会触发Bad payload错误。
正确的实现方式
方法1:手动构建解析变量的JSON字符串
如果变量内容比较简单,可以用双引号包裹JSON,同时转义内部的双引号(用反引号`)让PowerShell正确解析变量:
# 先定义你的变量 $cmdOutput = "Hello from PowerShell variable!" # 构建JSON并发送 Invoke-RestMethod -Method Post -ContentType 'Application/Json' -Body "{`"text`":`"$cmdOutput`"}" -Uri <YOUR WEBHOOK URL>
这里双引号让PowerShell解析$cmdOutput,反引号转义内部的双引号,保证JSON格式合法。
方法2:用ConvertTo-Json自动生成合法JSON(推荐)
如果变量内容包含特殊字符、换行或者复杂格式,手动转义容易出错,推荐用哈希表+ConvertTo-Json的方式,PowerShell会自动处理所有转义:
# 定义变量(比如包含换行的内容) $cmdOutput = @" 这是多行内容 第一行 第二行 "@ # 构建payload哈希表,转成JSON $payload = @{ text = $cmdOutput } | ConvertTo-Json # 发送请求 Invoke-RestMethod -Method Post -ContentType 'Application/Json' -Body $payload -Uri <YOUR WEBHOOK URL>
这种方式不仅能正确解析变量,还能自动处理JSON格式要求的转义,比如变量里的双引号、换行符都会被转成JSON认可的格式,避免Payload错误。
额外注意点
- 如果想发送Markdown格式的内容,直接在变量里写Markdown语法即可,Teams支持大部分常用的Markdown(比如加粗
**文本**、换行、列表等)。 - 确保你的Webhook URL是正确的,从Teams频道的连接器中获取的有效URL。
内容的提问来源于stack exchange,提问作者Cody Brown
相关产品推荐
相关产品推荐

