PowerShell调用REST API删除Azure DevOps分支返回400错误
故障原因
你的400错误由两个常见配置问题导致:
- 调用
Invoke-RestMethod时未指定ContentType为application/json,Azure DevOps服务端无法识别请求格式 - PowerShell转换单元素数组为JSON时可能自动降维为对象,不符合API要求的数组请求体格式
- CSV读取逻辑存在冲突:如果你的CSV本身已经携带
Branchname、OldObjectId列头,手动加-Header参数会覆盖原有列头,导致取值错误
修正后代码
# 读取CSV,若你的CSV无内置列头再保留-Header参数,有列头直接删除-skip 1和-Header配置 $FileData = Import-Csv -Path $filePath # 身份验证头请确保是正确的PAT格式,参考格式: # $AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($你的PAT令牌)")) } $FileData | ForEach-Object { Write-Output "正在删除分支:$($_.BranchName)" # 构造请求体数组,强制保留数组格式避免降维 $bodyArray = @( @{ oldObjectId = $_.objectId newObjectId = "0000000000000000000000000000000000000000" name = $_.BranchName } ) $json = ConvertTo-Json -InputObject $bodyArray -Depth 10 # 调用API新增ContentType参数 try { $response = Invoke-RestMethod -Uri $DeleteBranche_BaseURL -Method Post -Headers $AzureDevOpsAuthenicationHeader -Body $json -ContentType "application/json" Write-Output "删除成功:$($_.BranchName)" } catch { Write-Output "删除失败:$($_.BranchName),错误信息:$_" } }
额外检查项
- 确认
$DeleteBranche_BaseURL拼接正确,末尾未多带斜杠或者缺少组织、项目、仓库ID参数 - 确认你使用的PAT权限包含**代码(读和写)**权限
- 确认CSV中
BranchName列的值格式正确,必须是完整的ref路径,比如refs/heads/feature/test而不是仅feature/test
内容的提问来源于stack exchange,提问作者PavanKumar GVVS
相关产品推荐
相关产品推荐

