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

Azure DevOps中遍历Pull Request列表并匹配属性返回对象的方法

解决Azure DevOps Pull Request遍历与属性筛选问题

我来帮你梳理下问题所在,然后给出可行的解决方案!

首先,你遇到的核心问题是Azure DevOps API返回的响应结构:当你用Invoke-RestMethod请求PR列表时,返回的对象里,实际的Pull Request数组是嵌套在value属性中的,而不是直接的顶层对象。你之前直接遍历$listOfPullRequests,其实是在遍历整个响应的属性(比如count、value这些),而不是每个PR对象。

另外,你代码里的Write-Host $listOfPullRequests | ConvertFrom-Json是多余的——Invoke-RestMethod已经自动将JSON响应转换成PowerShell对象了,不需要再手动转换。

正确遍历Pull Request列表的代码

先修改遍历逻辑,针对$listOfPullRequests.value进行遍历:

$listOfPullRequestsURL = "https://dev.azure.com/*****/*****/_apis/git/repositories/*****/pullrequests?api-version=5.0"
$listOfPullRequests = Invoke-RestMethod -Uri $listOfPullRequestsURL -Headers @{Authorization = $pat } -Method Get

# 遍历每个Pull Request对象
ForEach ($pr in $listOfPullRequests.value) {
    Write-Host "=== 当前PR ==="
    Write-Host "PR编号: $($pr.pullRequestId)"
    Write-Host "源分支: $($pr.sourceRefName)"
    # 也可以直接输出完整对象
    # $pr | Format-List
}

根据sourceRefName属性筛选并返回完整对象

如果你需要找出特定源分支的PR,直接用Where-Object进行筛选即可,它会返回匹配条件的完整PR对象:

# 定义要匹配的源分支(比如refs/heads/feature/my-branch)
$targetBranch = "refs/heads/your-target-branch"

# 筛选出符合条件的PR
$matchingPRs = $listOfPullRequests.value | Where-Object { $_.sourceRefName -eq $targetBranch }

# 输出结果
if ($matchingPRs) {
    Write-Host "找到匹配的Pull Request:"
    $matchingPRs | Format-List
} else {
    Write-Host "没有找到匹配源分支的Pull Request"
}

额外说明

  • Azure DevOps的大部分API响应都遵循{ "count": N, "value": [数组] }的结构,所以处理这类请求时,记得要访问value属性获取实际数据。
  • 如果你想查看完整的响应结构,可以用$listOfPullRequests | ConvertTo-Json -Depth 10来输出格式化后的JSON,方便确认数据层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:50:01