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

调用Azure REST API删除迭代后GUI仍显示,求排查原因

问题描述

我通过PowerShell脚本调用Azure DevOps REST API添加新迭代,并删除Iteration 1至3这三个基础迭代。API调用返回正常,查询迭代列表显示这三个迭代已被删除,但进入Azure DevOps GUI界面后,这些迭代仍然存在:
GUI中仍显示已删除的迭代

附删除迭代的脚本代码:

function deleteIteration {
    [CmdletBinding()] param ( 
        [Parameter( Mandatory )] [string]    $organization,
        [Parameter( Mandatory )] [string]    $project,
        [Parameter( Mandatory )] [string]    $iteration,
        [Parameter( Mandatory )] [hashtable] $header
    )

    try {

        [string] $team        = getMainTeamName -organization $organization -project $project
        [string] $iterationId = getIterationId -organization $organization -project $project -iteration $iteration -team $team -header $header
        [string] $uri         = "$url/{0}/{1}/{2}/_apis/work/teamsettings/iterations/{3}?{4}" -f $organization, $project, $team, $iterationId, $apiVersion
        [Object] $query       = Invoke-RestMethod -Uri $uri -Method Delete -Headers $header

        Write-Host "- Iteration $iteration has been deleted !"

    } catch {
        Write-Host "##[error] An error occurred while deleting Iteration $name at $uri."
        Get-Error
        throw
    }
}
问题原因

你当前调用的是团队级迭代设置接口,这个操作仅将迭代从指定团队的可用迭代列表中移除,并没有真正删除项目级的迭代实体。Azure DevOps GUI显示的是项目级的分类节点(迭代的根实体),所以这些迭代看起来依然存在。

解决方法

要彻底删除迭代,需要完成两个步骤:

  1. 从所有关联团队中移除迭代
    你的现有脚本只处理了主团队,需要确保迭代从项目下所有团队的迭代设置中移除(如果其他团队也引用了这些迭代)。

  2. 调用项目级分类节点删除接口
    使用以下API真正删除项目级的迭代实体:

    • 请求URI:https://dev.azure.com/{organization}/{project}/_apis/wit/classificationnodes/Iterations/{iterationPath}?api-version=7.1
    • 请求方法:DELETE
    • 注意:iterationPath需要是迭代的完整路径(比如根级的Iteration 1,或者父节点下的ParentIteration/Iteration 1)

修改后的脚本示例

可以在现有函数中添加项目级删除的逻辑:

function deleteIteration {
    [CmdletBinding()] param ( 
        [Parameter( Mandatory )] [string]    $organization,
        [Parameter( Mandatory )] [string]    $project,
        [Parameter( Mandatory )] [string]    $iteration,
        [Parameter( Mandatory )] [hashtable] $header
    )

    try {
        # 1. 从主团队移除迭代(原有逻辑)
        [string] $team        = getMainTeamName -organization $organization -project $project
        [string] $iterationId = getIterationId -organization $organization -project $project -iteration $iteration -team $team -header $header
        [string] $teamUri     = "$url/{0}/{1}/{2}/_apis/work/teamsettings/iterations/{3}?{4}" -f $organization, $project, $team, $iterationId, $apiVersion
        Invoke-RestMethod -Uri $teamUri -Method Delete -Headers $header
        Write-Host "- Iteration $iteration removed from team $team"

        # 2. 删除项目级迭代实体
        [string] $projectUri  = "https://dev.azure.com/{0}/{1}/_apis/wit/classificationnodes/Iterations/{2}?api-version=7.1" -f $organization, $project, [Uri]::EscapeDataString($iteration)
        Invoke-RestMethod -Uri $projectUri -Method Delete -Headers $header
        Write-Host "- Iteration $iteration deleted from project"

    } catch {
        Write-Host "##[error] Error handling iteration $iteration : $_"
        Get-Error
        throw
    }
}
注意事项
  • 确保迭代没有关联任何工作项,否则项目级删除接口会返回错误
  • 如果迭代被多个团队引用,需要先从所有团队中移除,才能删除项目级实体
  • 迭代路径需要准确,有父节点时要包含完整层级(比如Release 1/Iteration 1)

内容的提问来源于stack exchange,提问作者Takadox et compagnie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:05:19