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

如何通过Azure DevOps REST API获取近n个迭代的指定字段工作项

脚本调整方案说明

本次调整跳过原流程中手动填写单条迭代路径的步骤,核心逻辑完全匹配定义的“最新n个迭代”筛选规则:

  • 自动拉取项目下所有正式排期的迭代节点,按迭代结束时间倒序排序,直接截取时间最新的n个迭代范围,无需遍历全部400余个迭代做冗余计算
  • 将筛选得到的迭代路径集合直接嵌入WIQL查询的IN条件,一次性拉取范围内所有符合要求的工作项,避免循环逐个迭代发起请求
  • 修复原脚本中JSON结构末尾多余逗号导致的解析报错问题
可配置参数说明

仅需要修改脚本开头的参数区内容,即可适配自身项目环境:

  • $token:你的Azure DevOps个人访问令牌
  • $orgName:所属Azure DevOps组织名称
  • $projectName:具体项目名称
  • $areaPath:需要筛选的区域路径
  • $n:需要拉取的最新迭代总数,例如设置$n=5时,会覆盖从当前正在运行的迭代往前连续共5个时间最新的迭代
  • $targetFields:自定义需要拉取的工作项字段列表
调整后完整可运行脚本
# ========== 可配置参数区,仅需修改以下内容即可运行 ==========
$token = '你的个人访问令牌PAT'
$orgName = '你的组织名'
$projectName = '你的项目名'
$areaPath = '你的区域路径,例如 组织名/项目名/业务模块'
$n = 5 # 定义需要拉取的最新迭代总数,包含当前迭代
$targetFields = @(
    "System.Id",
    "System.Title",
    "System.WorkItemType",
    "System.State",
    "System.IterationPath",
    "Microsoft.VSTS.Common.Priority",
    "System.CreatedDate",
    "System.ChangedDate",
    "System.Tags",
    "System.CommentCount"
)
# ============================================================

# 公共认证头初始化
$base64Auth = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$token"))
$headers = @{
    Authorization = "Basic $base64Auth"
}

# 拉取项目下所有迭代节点,按结束时间倒序取最新的n个
$iterationListUrl = "https://dev.azure.com/$orgName/$projectName/_apis/wit/classificationnodes/Iterations?`$depth=10&api-version=5.1"
$iterationResponse = Invoke-RestMethod -Uri $iterationListUrl -Headers $headers -Method Get
# 筛选有明确起止时间的正式排期迭代,按结束时间倒序排序
$sortedIterations = $iterationResponse.children | Where-Object { $_.attributes.finishDate } | Sort-Object -Property @{Expression={[datetime]$_.attributes.finishDate}} -Descending
# 截取最新的n个迭代路径,若项目迭代总数不足n则自动取全部
$targetIterationPaths = $sortedIterations[0..([Math]::Min($n-1, $sortedIterations.Count-1))] | ForEach-Object { "'$($_.path)'" }
$iterationPathFilter = "[System.IterationPath] IN ($($targetIterationPaths -join ', '))"

# 按筛选条件查询符合要求的工作项ID列表
$wiqlUrl = "https://dev.azure.com/$orgName/$projectName/_apis/wit/wiql?api-version=5.1"
$wiqlQuery = @"
{
   "query": "SELECT [System.Id] FROM workitems 
              Where [System.AreaPath] = '$areaPath' 
                 and $iterationPathFilter
                 and [System.WorkItemType] = 'Story' 
              order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc"
}
"@
$wiqlResponse = Invoke-RestMethod -Uri $wiqlUrl -Headers $headers -Method Post -Body $wiqlQuery -ContentType "application/json"
$workItemIdList = $wiqlResponse.workItems.id -join ','

# 批量拉取对应工作项的指定字段值
$workItemBatchUrl = "https://dev.azure.com/$orgName/$projectName/_apis/wit/workitemsbatch?api-version=5.0"
$batchRequestBody = @"
{
  "ids": [$workItemIdList],
  "fields": $($targetFields | ConvertTo-Json)
}
"@
$batchResponse = Invoke-RestMethod -Uri $workItemBatchUrl -Headers $headers -Method Post -Body $batchRequestBody -ContentType "application/json"

# 输出最终结果
Write-Host "拉取到的指定字段工作项结果:"
$batchResponse.value | ConvertTo-Json -Depth 100
运行注意事项

认证要求:PAT需要分配「项目-查看项目级信息」「工作项-读取工作项」的权限,否则会返回接口权限不足的报错
排序逻辑:直接采用迭代节点自带的finishDate做倒序排序,完全匹配“时间最新的n个迭代”的判定规则,不会因为迭代命名格式不统一出现排序偏差
性能表现:相比原脚本逐个迭代发起请求的逻辑,当前调整后的代码仅需3次接口请求即可完成全流程,不会因为项目有400余个迭代出现请求过多、触发限流的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 21:27:07