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
相关产品推荐
相关产品推荐

