设置TFS团队

时间:2017-01-16 14:46:16

标签: json rest powershell tfs on-prem

我正在尝试使用其余API和PowerShell在TFS 2017内部部署服务器上设置与团队关联的区域。

当我尝试调用我的URI时

http://MyTfsServer:8080/tfs/DefaultCollection/TeamProject/TeamName/_apis/Work/TeamSettings/TeamFieldValues?api-version=2.0-preview.1

API example中用json包解释的那样,我得到以下错误返回:     

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"Value cannot be null.
\r\nParameter name: patch","typeName":"System.ArgumentNullException, mscorlib, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"typeKey":"ArgumentNullException","errorCode":0,"eventId":0}
+ ...   $result = Invoke-RestMethod -Method Patch -Uri $setTeamAreaPathUri  ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
我真的可以使用som指导我应该寻找什么。我已经验证了我的Json包,它应该是格式良好的。

{
   "defaultValue":  "TeamProject\\Area1",
    "Values":  [
                   {
                       "value":  "Area2\\Area21\\Area211",
                       "includeChildren":  false
                   },
                   {
                       "value":  "Area3\\Area31\\Area311",
                       "includeChildren":  false
                   }
               ]

}

更新

我正在使用powershell Invoke-RestMethod cmdlet

调用上面的URI
Invoke-RestMethod -Method Patch -Uri $setTeamAreaPathUri -UseDefaultCredentials -Body $json -ContentType "application/json"

$setTeamAreaPathUri对应上述http URI。我应该使用post作为我的webrequest方法而不是补丁吗?

我完全能够使用get请求从同一URI获得响应。但是,无法使用补丁方法更改现有团队区域: - (

更新2

这似乎与斯堪的纳维亚角色'æøå'被包含在区域路径中有关。如果我排除包括æ,ø或å的所有区域路径,我没有错误。从我的例子来看,这并不明显......对不起! 有没有办法解析json所以TFS服务器不会破坏它?或者这是因为我缺乏PowerShell rest api调用的经验?

2 个答案:

答案 0 :(得分:3)

看来这与包含特殊字符的区域路径有关,例如æ,ø,å主要用于斯堪的纳维亚半岛。

如果我在调用invoke-restmethod

时指定了我的内容类型

-ContentType "application/json;charset=utf-8"

我对调用API的补丁方法没有任何问题。

很抱歉给您带来不便!

谢谢你的帮助!

答案 1 :(得分:0)

我也不能重复这个问题。这似乎是因为补丁对象为空而发生的。你可以和邮递员一起试试这个api吗?此外,默认值应该是团队允许的团队字段值之一。