我试图使用 powershell 和 invoke-restmethod 创建一个代理池(Azure devops Server)。要做到这一点,我使用下面的参考资料来尝试建立一个正确的json请求体。https:/docs.microsoft.comen-usrestapiazuredevopsdistributedtaskpoolsadd?view=azure-devops-rest-5.1。所有基本的东西都到位了(凭证等--我已经成功地使用其他uris运行其他任务)多次尝试寻找正确的主体,结果都差不多,最新的例子如下。
$requestBodyAgentPool = '{
"Id": "3"
"name": "Testpool",
"isHosted": $false,
"autoSize": $false,
"poolType": "automation",
"isLegacy": $false
}'
使用下面的方法(通过运行GET来验证URI和证书)。
$uriPool = "http://localhost/DefaultCollection/_apis/distributedtask/pools?api-version=5.1"
Invoke-RestMethod -Uri $uriPool -Method POST -ContentType 'application/json' -Body $requestBodyAgentPool -Credential $cred
失败的原因如下,这对我来说意味着参数id为空。
Invoke-RestMethod : {"$id": "1", "innerException":null, "message": "Value cannot be null.\r\nParameter name: pool.Name", "typeName": "System.ArgumentNullException, mscorlib", "typeKey": "ArgumentNullException", "errorCode":0, "eventId":0}。
我感觉这只是我对编码术语和阅读参考文档的经验不足,但我不清楚是格式错误还是我错过了一个强制性参数的格式(id或名称?
建议你可以使用一些UI工具,如Postman来验证你是否能够运行相同的Rest API。这将帮助你缩小问题的范围。
{
"name": "{poolname}",
"autoProvision": $true
}
请求体应该是一个 json 格式。 尝试明确添加 转换为Json 为你的帖子正文。
更多细节请看这个链接中Daniel的回复。TFS 2018 以程序化方式创建代理池