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

Azure DevOps Release API调用问题:无法获取超100条结果且参数报错

问题解决:获取Azure DevOps超过100条发布记录并修复参数错误

问题1:"ResponseHeadersVariable"参数不存在

这个参数仅在PowerShell 7+版本的Invoke-RestMethod中支持,若你使用PowerShell 5.1或更低版本,就会触发该错误。解决方式是改用Invoke-WebRequest,它在所有PowerShell版本中都能返回包含响应头的完整请求对象。

问题2:无法获取超过100条结果

Azure DevOps Release API默认单次最多返回100条记录,即便设置更大的$top值也可能受限于接口上限。正确做法是通过**续传令牌(continuation token)**循环发起请求,直到获取全部数据。

你的代码还有两个关键错误:

  • 认证头拼接错误:("Basic $token" -f $base64AuthInfo)中的$token是未定义变量,应替换为$base64AuthInfo
  • 续传令牌未做URL编码:特殊字符可能导致后续请求失败

修正后的完整代码

[CmdletBinding()]
param(
    [Parameter(Mandatory=$true)]
    [string] $AzureDevOpsPAT,

    [Parameter(Mandatory=$true)]
    [string] $OrganizationName,
   
    [Parameter(Mandatory=$true)]
    [string] $Project
)

$minCreatedTime = "2024-02-01T00:00:00.00Z"
$maxCreatedTime = "2024-03-31T23:59:59.00Z"
$folder= "\Web"
$topCount = 100 # API单次返回的最大记录数,匹配接口上限

$User = ""
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $User, $AzureDevOpsPAT)))
$headers = @{ Authorization = "Basic $base64AuthInfo" }

# 初始化请求URL
$baseUrl = "https://vsrm.dev.azure.com/$OrganizationName/$Project/_apis/release/releases?api-version=7.0&path=$folder&minCreatedTime=$minCreatedTime&maxCreatedTime=$maxCreatedTime&`$top=$topCount"
$currentUrl = $baseUrl
$allReleases = @()

do {
    Write-Host "正在请求API: $currentUrl"
    # 使用Invoke-WebRequest获取完整响应(含头信息)
    $response = Invoke-WebRequest -Uri $currentUrl -Headers $headers -Method Get -ContentType "application/json"
    $releaseData = $response.Content | ConvertFrom-Json
    $allReleases += $releaseData.value

    # 检查是否有续传令牌
    $continuationToken = $response.Headers["x-ms-continuationtoken"]
    if ($continuationToken) {
        Write-Host "获取到续传令牌: $continuationToken"
        # 对令牌做URL编码,避免特殊字符导致请求失败
        $encodedToken = [Uri]::EscapeDataString($continuationToken)
        $currentUrl = "$baseUrl&continuationToken=$encodedToken"
    } else {
        $continuationToken = $null
    }
} while ($continuationToken)

# 输出所有获取到的发布记录
$allReleases

关键修正说明

  • 用Invoke-WebRequest替代Invoke-RestMethod,兼容所有PowerShell版本,同时直接获取响应头
  • 修复认证头变量错误,确保Basic认证字符串正确生成
  • 设置符合API上限的$topCount(建议100)
  • 对续传令牌做URL编码,避免特殊字符干扰请求
  • 优化循环逻辑,确保所有分页数据被完整收集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:36:23