使用PowerShell禁用Azure DevOps流水线时遇PUT方法不支持错误
解决Azure DevOps流水线禁用脚本的PUT方法错误
错误原因
你调用的_apis/pipelines/<ID>端点不支持PUT请求,该端点仅提供GET操作来获取流水线信息。要修改流水线的启用/禁用状态,需要使用构建定义(Build Definition)API,或者支持修改操作的新版Pipelines API。
修正后的脚本(稳定版方案)
使用Build Definition API来更新流水线的queueStatus:
$project = "<Project-Name>" $organization = "<Org-Name>" $pat = "<PAT>" $definitionId = "<你的流水线定义ID>" # 可在流水线页面URL中找到,格式类似`definitionId=123` $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($pat)")) $headers = @{ Authorization = "Basic $base64AuthInfo" "Content-Type" = "application/json" } # 替换为Build Definition API端点 $definitionUrl = "https://dev.azure.com/$organization/$project/_apis/build/definitions/$definitionId?api-version=6.0" $definitionDetails = Invoke-RestMethod -Uri $definitionUrl -Method Get -Headers $headers # 设置queueStatus为disabled(启用则改为enabled) $definitionDetails.queueStatus = "disabled" $body = $definitionDetails | ConvertTo-Json -Depth 10 Invoke-RestMethod -Uri $definitionUrl -Method Put -Headers $headers -Body $body -ContentType "application/json"
关键说明
- 确认Definition ID:可在流水线页面的URL中找到,格式类似
https://dev.azure.com/xxx/xxx/_build?definitionId=123,其中123就是Definition ID。 - 权限要求:你的PAT需要拥有**Build定义(Edit)**权限,否则会返回权限不足的错误。
- API版本:示例使用api-version=6.0,也可以更新到更高稳定版本(如7.0)以获得更好兼容性。
新版Pipelines API方案(预览版)
如果坚持使用新版Pipelines API,可采用PATCH方法:
$project = "<Project-Name>" $organization = "<Org-Name>" $pat = "<PAT>" $pipelineId = "<你的流水线ID>" $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($pat)")) $headers = @{ Authorization = "Basic $base64AuthInfo" "Content-Type" = "application/json" } $pipelineUrl = "https://dev.azure.com/$organization/$project/_apis/pipelines/$pipelineId?api-version=7.1-preview.1" # 仅传递需要修改的属性,无需获取全部详情 $body = @{ configuration = @{ queueStatus = "disabled" } } | ConvertTo-Json -Depth 5 Invoke-RestMethod -Uri $pipelineUrl -Method Patch -Headers $headers -Body $body -ContentType "application/json"
内容的提问来源于stack exchange,提问作者Mudit Balooja
相关产品推荐
相关产品推荐

