如何格式化PowerShell推送的Azure服务主体数据使其在MS Teams正常展示
问题原因
你遇到的格式混乱是两个问题共同导致的:
- 调用
Get-Content时未加-Raw参数,返回结果是按行拆分的字符串数组,直接放入双引号插值时,PowerShell会默认用空格拼接所有数组元素,原文件的换行直接被替换为空格。 - Teams 传入Webhook的消息内容支持Markdown解析,要保留固定格式的文本需要对应语法支持。
解决方案
最简单的方式是读取文件时保留完整换行,再用Markdown代码块包裹内容,就能完全复现result.list的原有格式,修改后代码如下:
# 加-Raw参数直接读取完整带换行的整段文本 $Body = Get-Content -Path .\result.list -Raw $JSONBody = [PSCustomObject][Ordered]@{ "@type" = "text/plain" "@context" = "http://schema.org/extensions" "summary" = "Incoming Alert Test Message!" "themeColor" = '0078D7' "title" = "Incoming Alert Test Message!" # 用Markdown代码块包裹内容,空格、换行格式完全保留 "text" = "```$Body```" } $TeamMessageBody = ConvertTo-Json $JSONBody -Depth 100 $parameters = @{ "URI" = '<uri>' "Body" = $TeamMessageBody "ContentType" = 'application/json' } Invoke-RestMethod @parameters
如果不想用代码块样式展示,也可以将换行替换为Teams支持的HTML换行标签,只需修改text字段赋值逻辑即可:
"text" = $Body.Replace("`n", "<br>")
内容的提问来源于stack exchange,提问作者olti
相关产品推荐
相关产品推荐

