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

如何批量提取Azure DevOps全组织项目Release记录并修复JSON导出问题

问题原因梳理
  • $top参数在PowerShell中失效的核心原因:PowerShell默认会把URL中的$识别为变量前缀,未赋值的$top会被替换为空值,实际发出的请求中没有携带该参数,因此始终返回默认的100条记录
  • 单次100条上限问题:Azure DevOps REST API的单次返回上限就是100,即使设置更大的$top值也不会生效,必须通过分页续传逻辑拉取全量数据
  • 导出JSON无效问题:通常是循环请求时直接追加内容到文件,未维护合法的数组结构,或是导出时未设置足够的JSON序列化深度导致层级内容被截断
可用修改后PowerShell脚本

先替换脚本开头的三个自定义参数:Azure DevOps组织名、拥有Release (Read)权限的PAT令牌、导出文件路径。

# 自定义配置项
$organization = "替换为你的组织名"
$pat = "替换为你的PAT令牌"
$outputJsonPath = "C:\Temp\AllReleaseRecords.json"
$outputCsvPath = "C:\Temp\AllReleaseRecords.csv"

# 构造认证头
$base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))
$headers = @{
    Authorization = "Basic $base64Auth"
    "Content-Type" = "application/json"
}

# 初始化结果存储数组
$allReleases = @()
$continuationToken = $null

do {
    # URL中$前加转义符避免被识别为PowerShell变量,也可直接用%24top代替$top
    $reqUrl = "https://vsrm.dev.azure.com/$organization/_apis/release/releases?api-version=7.1-preview.8&`$top=100"
    if ($continuationToken) {
        $reqUrl += "&continuationToken=$continuationToken"
    }

    try {
        $res = Invoke-RestMethod -Uri $reqUrl -Headers $headers -Method Get
        if ($res.value) {
            $allReleases += $res.value
        }
        # 读取响应头中的续传令牌
        $continuationToken = $res.headers.'x-ms-continuationtoken'
    }
    catch {
        Write-Host "请求异常: $_"
        break
    }
} while ($continuationToken)

# 导出合法JSON文件,设置Depth避免层级截断
$allReleases | ConvertTo-Json -Depth 10 | Out-File $outputJsonPath -Encoding utf8
Write-Host "全量Release记录导出完成,共$($allReleases.Count)条,JSON路径:$outputJsonPath"

# 可选导出CSV格式,可直接用Excel打开
$allReleases | Select-Object id,name,status,createdOn,modifiedOn,@{n='项目名';e={$_.project.name}},@{n='发布定义名';e={$_.releaseDefinition.name}} | Export-Csv -Path $outputCsvPath -Encoding utf8 -NoTypeInformation
Write-Host "CSV导出完成,路径:$outputCsvPath"
关键修改说明
  • 修复$top失效:URL中的$top前添加转义符,避免PowerShell变量解析
  • 实现全量提取:通过循环读取响应头的x-ms-continuationtoken分页拉取,直到续传令牌为空,突破100条限制
  • 修复JSON格式问题:所有结果先存入统一数组,最后一次性序列化导出,设置足够的序列化深度保证结构完整,生成的是标准合法JSON数组,可直接转换为Excel

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:36:03