如何在TeamCity构建的PowerShell脚本发送的Teams消息中添加可点击超链接
Teams Webhook 消息URL无法点击解决方案
首先先修正你现有脚本里的拼写错误:[Text.Encoding]::UTF8.GetByres($body) 方法名拼写错误,正确写法为GetBytes,避免后续环境变动时出现运行报错。
方案1:无需使用MessageCard,直接修改文本格式
Teams入站Webhook的普通消息text字段支持基础Markdown语法渲染,你只需要把原本直接拼接的URL,改成Markdown超链接格式[链接显示文本](跳转地址)即可,修改后的参考脚本:
$targetUrl = "https://需要跳转的实际地址" # 替换为你的TeamCity构建页等目标地址 $body = @{ title = "MyTitle"; text = "Visit: [点击访问目标页面]($targetUrl)"; } | ConvertTo-Json $postBody = [Text.Encoding]::UTF8.GetBytes($body) Invoke-WebRequest -Method Post -Uri "https://mycorp.webhook.office.com/你的Webhook实际地址" -Body $postBody -ContentType "application/json" -UseBasicParsing
方案2:使用MessageCard格式(兼容性更强,支持富文本扩展)
如果方案1的链接渲染异常,或者你后续需要给消息加状态色块、操作按钮、多分区内容,推荐使用MessageCard格式,链接渲染稳定性更高,参考脚本:
$targetUrl = "https://需要跳转的实际地址" $cardBody = @{ "@type" = "MessageCard" "@context" = "http://schema.org/extensions" summary = "构建通知" themeColor = "0076D7" title = "MyTitle" sections = @( @{ activityTitle = "构建任务通知" text = "Visit: [点击访问目标页面]($targetUrl)" } ) } | ConvertTo-Json -Depth 10 $postBody = [Text.Encoding]::UTF8.GetBytes($cardBody) Invoke-WebRequest -Method Post -Uri "https://mycorp.webhook.office.com/你的Webhook实际地址" -Body $postBody -ContentType "application/json" -UseBasicParsing
注意使用MessageCard格式时,ConvertTo-Json必须加-Depth 10参数,避免结构化对象层级过深被截断,导致消息发送失败或格式错乱。
补充:TeamCity构建步骤中可以直接用内置变量拼接当前构建详情页地址,格式为
%teamcity.serverUrl%/viewLog.html?buildId=%teamcity.build.id%,不需要额外调用接口获取。
内容的提问来源于stack exchange,提问作者user4134476
相关产品推荐
相关产品推荐

