PowerShell调用Azure DevOps REST API更新工作项提示需传入有效patch文档
问题原因
报错核心是请求体转换出的JSON不符合JSON Patch规范要求的数组格式,由PowerShellConvertTo-Json的管道枚举特性导致:
- 脚本中定义的
$body为单元素数组,本身符合JSON Patch的操作集合要求 - 使用
$body | ConvertTo-Json管道写法时,PowerShell管道会自动展开数组元素,ConvertTo-Json实际接收到的输入是单个哈希表对象,而非包含1个操作的数组 - 最终生成的JSON是无外层方括号的单个对象,Azure DevOps REST API无法识别为合法Patch文档,直接抛出参数校验错误
修复方案
直接将数组作为ConvertTo-Json的输入参数传入,不要通过管道传递,同时建议将序列化深度设置为10,避免后续复杂值出现序列化截断:
将原脚本最后一行替换为:
$response = Invoke-RestMethod -Uri $url -Method PATCH -Headers $headers -Body (ConvertTo-Json -InputObject $body -Depth 10)
如果你使用PowerShell 7及以上版本,也可以保留管道写法,添加-AsArray参数强制输出数组格式:
$response = Invoke-RestMethod -Uri $url -Method PATCH -Headers $headers -Body ($body | ConvertTo-Json -Depth 10 -AsArray)
格式校验
发起请求前可以先打印转换后的JSON确认结构,合法的请求体JSON必须是外层带方括号的数组,格式如下:
[ { "op": "add", "path": "/fields/Microsoft.VSTS.Build.IntegrationBuild", "value": "v.09-09-1999" } ]
如果输出没有外层方括号,说明序列化格式仍有问题。
内容的提问来源于stack exchange,提问作者mdailey77
相关产品推荐
相关产品推荐

