如何使用RESTAPI更新VisualStudioTeamServices生成定义?

如何使用RESTAPI更新VisualStudioTeamServices生成定义?,rest,powershell,azure-devops,Rest,Powershell,Azure Devops,我正在尝试使用中记录的RESTAPI和PowerShell脚本,以编程方式更新Team Services生成定义中变量的值 因此,计划是使用GET读取定义,修改返回对象中的值,然后使用PUT更新定义 我的问题是,最后一步(PUT)失败,出现了一个异常(似乎是在服务器端)。即使我没有修改定义中的任何内容,也会引发相同的异常 因此,简单地说,PowerShell代码是: $definitionId = 27 $url = "https://imaginera.visualstudio.com/Def

我正在尝试使用中记录的RESTAPI和PowerShell脚本,以编程方式更新Team Services生成定义中变量的值

因此,计划是使用GET读取定义,修改返回对象中的值,然后使用PUT更新定义

我的问题是,最后一步(PUT)失败,出现了一个异常(似乎是在服务器端)。即使我没有修改定义中的任何内容,也会引发相同的异常

因此,简单地说,PowerShell代码是:

$definitionId = 27
$url = "https://imaginera.visualstudio.com/DefaultCollection/Fidelis/_apis/build/definitions/" + $definitionId + "?api-version=2.0"

# Read the build definition.
$definition = Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get -Uri $url 

# Update the build definition.
Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Put -Uri $url -Body (ConvertTo-Json $definition) -ContentType "application/json"
我得到的例外是:

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"Value cannot be null.\r\nParameter name: definition.Options[0].Definition","typeName":"System.ArgumentNullException, mscorlib, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","typeKey":"ArgumentNullException","errorCode":0,"eventId":0}

我想我正在使用文档中描述的API,但我可能遗漏了一些内容。

指定一个
-Depth
参数以
转换为Json

详细构建日志是什么?如果你像Daniel说的那样指定-Depth参数,结果会怎样?试着用同样的方法做同样的事情,同样的错误。根据答案,我将
-Depth
设置为3,效果很好。这就是问题所在,谢谢!我没有想象默认值为2。谢谢!我花了几个小时才度过这一关!早该找的!除此之外,我还遇到了一个不同的问题。对于某些定义,我得到一个“转换的JSON字符串格式不正确。”转换为JSON时出错。根据this(),这是一个PowerShell错误,可以通过添加-Compress选项来解决。