在Powershell中更新VSTS工作项的正确调用RestMethod语法是什么-构造包含Windows路径的JSON字符串
当尝试使用Invoke RestMethod更新现有的VSTS工作项时,我会不断得到 您必须在请求正文中传递有效的修补程序文档 这就是我要传递的在Powershell中更新VSTS工作项的正确调用RestMethod语法是什么-构造包含Windows路径的JSON字符串,powershell,azure-devops-rest-api,Powershell,Azure Devops Rest Api,当尝试使用Invoke RestMethod更新现有的VSTS工作项时,我会不断得到 您必须在请求正文中传递有效的修补程序文档 这就是我要传递的 $Body = '[{ "op": "test", "path": "/rev", "value": 1},{ "op": "add", "path": "/fields/System.IterationPath", "value":"' + $caseIterationPath + '"},{ "op": "add", "path": "/field
$Body = '[{ "op": "test", "path": "/rev", "value": 1},{ "op": "add", "path": "/fields/System.IterationPath", "value":"' + $caseIterationPath + '"},{ "op": "add", "path": "/fields/System.AreaPath", "value":"' + $caseAreaPath + '"}]'
Invoke-RestMethod -Uri "$rootUri/_apis/wit/workitems/$($case.id)?$apiVersion" -Method PATCH -ContentType application/json-patch+json -Headers @{Authorization= $authorization} -Body $Body
身体膨胀到
"[{ "op": "test", "path": "/rev", "value": 1},{ "op": "add", "path": "/fields/System.IterationPath", "value":"Foo\Bar 2016.4\2016.4.02"},{ "op": "add", "path": "/fields/System.AreaPath", "value":"Foo\Apps\Bar Stool\Eating"}]"
任何帮助都将不胜感激 我认为您可能需要避开AreaPath值中的后斜杠。根据上的示例,它们使用了双反斜杠
{
"id": 299,
"rev": 2,
"fields": {
"System.AreaPath": "Fabrikam-Fiber-Git\\Website",
"System.TeamProject": "Fabrikam-Fiber-Git",
"System.IterationPath": "Fabrikam-Fiber-Git",
"System.WorkItemType": "Task",
"System.State": "To Do",
"System.Reason": "New task",
"System.CreatedDate": "2014-12-29T20:49:21.617Z",
"System.CreatedBy": "Jamal Hartnett <fabrikamfiber4@hotmail.com>",
"System.ChangedDate": "2014-12-29T20:49:23.933Z",
"System.ChangedBy": "Jamal Hartnett <fabrikamfiber4@hotmail.com>",
"System.Title": "JavaScript implementation for Microsoft Account",
"Microsoft.VSTS.Scheduling.RemainingWork": 4,
"System.Description": "Follow the code samples from MSDN",
"System.History": "Moving to the right area path"
},
"relations": [
{
"rel": "System.LinkTypes.Hierarchy-Reverse",
"url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/297",
"attributes": {
"isLocked": false,
"comment": "decomposition of work"
}
}
],
"_links": {
"self": {
"href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/299"
},
"workItemUpdates": {
"href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/299/updates"
},
"workItemRevisions": {
"href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/299/revisions"
},
"workItemHistory": {
"href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/299/history"
},
"html": {
"href": "https://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=d81542e4-cdfa-4333-b082-1ae2d6c3ad16&id=299"
},
"workItemType": {
"href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c/_apis/wit/workItemTypes/Task"
},
"fields": {
"href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/fields"
}
},
"url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/299"
}
{
“id”:299,
“rev”:2,
“字段”:{
“System.AreaPath”:“Fabrikam光纤Git\\Website”,
“System.TeamProject”:“Fabrikam光纤Git”,
“System.IterationPath”:“Fabrikam光纤Git”,
“System.WorkItemType”:“任务”,
“系统状态”:“待办事项”,
“系统原因”:“新任务”,
“系统创建日期”:“2014-12-29T20:49:21.617Z”,
“System.CreatedBy”:“Jamal Hartnett”,
“系统变更日期”:“2014-12-29T20:49:23.933Z”,
“System.ChangedBy”:“Jamal Hartnett”,
“System.Title”:“Microsoft帐户的JavaScript实现”,
“Microsoft.VSTS.Scheduling.RemainingWork”:4,
“System.Description”:“遵循MSDN中的代码示例”,
“系统历史记录”:“移动到正确的区域路径”
},
“关系”:[
{
“rel”:“System.LinkTypes.Hierarchy Reverse”,
“url”:”https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/297",
“属性”:{
“isLocked”:false,
“评论”:“工作分解”
}
}
],
“_链接”:{
“自我”:{
“href”:”https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/299"
},
“工作项更新”:{
“href”:”https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/299/updates"
},
“工作项修订”:{
“href”:”https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/299/revisions"
},
“工作项目历史”:{
“href”:”https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/299/history"
},
“html”:{
“href”:”https://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=d81542e4-cdfa-4333-b082-1ae2d6c3ad16&id=299“
},
“工作项类型”:{
“href”:”https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c/_apis/wit/workItemTypes/Task"
},
“字段”:{
“href”:”https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/fields"
}
},
“url”:”https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/299"
}
使用\
作为转义字符;例如,\t
是制表符的转义序列(Unicode代码点0x9
)
因此,要使用文本\
(例如在Windows路径中),必须将其转义为\
您可以手动转义用于合成JSON字符串的所有变量值,$caseIterationPath-替换“\\\”,“\\”
(原文如此)
但是,首先构建常规PowerShell数据结构可能会更容易,然后让转换为Json
在转换时进行必要的转义
在本案中:
# Sample values.
$caseIterationPath = 'c:\path\to\iteration'
$caseAreaPath = 'c:\path\to\area'
# Construct an array of hashtables to be converted to JSON later.
$Body = @(
@{
op = 'test'
path = '/rev'
value = 1
}
@{
op = 'add'
path = '/fields/System.IterationPath'
value = $caseIterationPath
}
@{
op = 'add'
path = '/fields/System.AreaPath'
value = $caseAreaPath
}
)
# Convert the array to a string containing JSON.
# ConvertTo-Json will perform any required escaping.
$jsonBody = ConvertTo-Json $Body
# Invoke the REST method.
Invoke-RestMethod -Uri "$rootUri/_apis/wit/workitems/$($case.id)?$apiVersion" `
-Method PATCH -ContentType application/json-patch+json `
-Headers @{Authorization= $authorization} `
-Body $jsonBody
在上面的代码中,$jsonBody
最终包含以下内容-请注意\
实例如何作为\
正确转义:
[
{
"path": "/rev",
"op": "test",
"value": 1
},
{
"path": "/fields/System.IterationPath",
"op": "add",
"value": "c:\\path\\to\\iteration"
},
{
"path": "/fields/System.AreaPath",
"op": "add",
"value": "c:\\path\\to\\area"
}
]
非常感谢。这是一个很大的帮助。