如何用PowerShell通过Azure DevOps REST API添加带格式工作项评论?
Azure DevOps工作项评论添加格式与提及的正确做法
你遇到的问题核心是错误地对包含HTML格式标签的整个文本做了HTML编码,导致标签被转成实体字符(比如<b>变成<b>),自然无法被Azure DevOps解析成格式。要实现带加粗、斜体的评论,只需调整编码范围,保留合法的HTML标签,同时正确处理@提及格式。
正确实现步骤
- 仅编码用户输入的原始特殊字符:只对动态内容(比如
$DDJ Relevant Information #@$%^&*)中的特殊字符编码,不要包裹HTML格式标签一起转义。 - 直接使用支持的HTML标签:Azure DevOps支持常见的HTML格式标签,比如
<b>(加粗)、<i>(斜体)、<u>(下划线)、<ul>/<li>(列表)等。 - 正确构造@提及:Azure DevOps的@提及需要特定的HTML结构才能触发用户通知,格式为
<a href="#" data-vss-mention="version:2.0,userid:用户ID">@用户名</a>;如果不知道用户ID,也可以用显示名替代(比如data-vss-mention="version:2.0,displayName:用户名")。
完整PowerShell代码示例
# 配置Azure DevOps参数 $orgName = "你的组织名" $projName = "你的项目名" $workItemId = "目标工作项ID" $patToken = "你的PAT令牌" # 需要具备工作项编辑权限 $userDisplayName = "要提及的用户名" # 动态内容:仅对这部分做HTML编码,转义特殊字符 $dynamicContent = "Here is a new file with relevant information: $DDJ Relevant Information #@$%^&*" $encodedDynamicContent = [System.Net.WebUtility]::HtmlEncode($dynamicContent) # 构造带格式和提及的评论内容 # 用<b>标签包裹需要加粗的部分,<i>包裹斜体,按需调整格式 $commentContent = @" <div> <a href="#" data-vss-mention="version:2.0,displayName:$userDisplayName">@$userDisplayName</a> <p> 这是一段普通文本,<b>$encodedDynamicContent</b> 这里是加粗内容,<i>这是斜体内容</i> </p> </div> "@ # 构造请求体 $body = @{ text = $commentContent } | ConvertTo-Json # 发送REST API请求 $apiUrl = "https://dev.azure.com/$orgName/$projName/_apis/wit/workitems/$workItemId/comments?api-version=7.1-preview.3" $headers = @{ Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$patToken")) } Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $headers -Body $body -ContentType "application/json"
关键注意事项
- 不要对包含HTML标签的整个评论内容做编码,仅编码用户输入的原始动态内容,避免格式标签被转义。
- Azure DevOps仅支持基础HTML标签,不要使用复杂的CSS或JS相关标签。
- PAT令牌需要具备工作项编辑权限,否则会返回权限错误。
内容的提问来源于stack exchange,提问作者ahi issou
相关产品推荐
相关产品推荐

