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

如何使用PowerShell Invoke-RestMethod调用API添加Azure DevOps分支策略

解决方案:Azure DevOps 分支策略自动化配置(PowerShell实现)

一、从GET请求返回结果中提取特定策略值

你调用GET接口拿到的返回结果是JSON格式的策略数组,每个元素对应一条已配置的策略,你可以通过筛选指定字段提取你需要的数值,以下是提取构建验证类策略的示例代码:

# 配置基础参数
$organization = "你的组织名"
$project = "你的项目名"
$repoName = "目标仓库名"
$pat = "你的个人访问令牌"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$pat)))
$header = @{Authorization=("Basic {0}" -f $base64AuthInfo)}

# 调用GET接口获取现有策略
$getPolicyUrl = "https://dev.azure.com/$organization/$project/_apis/policy/configurations/repo=$repoName&api-version=6.0"
$allPolicies = Invoke-RestMethod -Uri $getPolicyUrl -Headers $header -Method Get

# 提取所有构建验证类型的策略,构建验证的固定类型ID为0609b952-1397-4640-95ec-e0055d2f2c33
$buildValidationPolicies = $allPolicies.value | Where-Object { $_.type.id -eq "0609b952-1397-4640-95ec-e0055d2f2c33" }

# 提取特定值示例:获取第一条构建验证策略关联的构建定义ID、生效分支
$targetBuildDefId = $buildValidationPolicies[0].settings.buildDefinitionId
$targetBranch = $buildValidationPolicies[0].settings.scope[0].refName

各个核心字段的存储位置说明:

  • 策略类型ID存放在type.id字段,同类型策略的ID是固定值,你可以直接从现有返回结果中复制复用
  • 策略的自定义配置全部在settings字段下,比如构建验证的触发规则、合并要求都在这个节点下
  • 策略的生效范围存放在settings.scope数组里,对应具体的仓库、分支匹配规则

二、添加新的分支策略配置

添加策略直接调用同路径的POST接口即可,只需要按规则构造请求体,以下是添加构建验证策略的示例:

# 构造新构建验证策略的请求体
$newPolicyBody = @{
    type = @{
        # 构建验证策略的固定类型ID,其他类型策略替换为对应ID即可
        id = "0609b952-1397-4640-95ec-e0055d2f2c33"
    }
    # 配置策略是否启用
    isEnabled = $true
    # 配置策略是否强制要求通过才能合并
    isBlocking = $true
    settings = @{
        # 要关联的构建定义ID,可从上文提取的结果中传值
        buildDefinitionId = $targetBuildDefId
        queueOnSourceUpdateOnly = $true
        # 构建结果有效期,单位分钟,0代表永久有效
        validDuration = 0
        manualQueueOnly = $false
        # 策略生效范围
        scope = @(
            @{
                repositoryId = $allPolicies.value[0].settings.scope[0].repositoryId
                # 匹配的分支,比如main分支就是refs/heads/main,也可以用startsWith匹配特征分支前缀
                refName = "refs/heads/main"
                matchKind = "exact"
            }
        )
    }
} | ConvertTo-Json -Depth 10

# 调用POST接口添加新策略
$addPolicyUrl = "https://dev.azure.com/$organization/$project/_apis/policy/configurations?api-version=6.0"
Invoke-RestMethod -Uri $addPolicyUrl -Headers $header -Method Post -Body $newPolicyBody -ContentType "application/json"

注意事项

  • 如果要配置其他类型的策略,只需要把type.id替换为对应策略的ID,同时调整settings节点的字段即可,你可以先在界面手动创建一条目标策略,再调用GET接口拿到返回结果,直接复用对应字段的结构
  • 你的PAT需要有项目级别的策略编辑权限,否则会返回403错误

内容的提问来源于stack exchange,提问作者Kart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:06:05