You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:45:02