【问题标题】:Azure DevOps Rest Api to get all projects with continuation tokenAzure DevOps Rest Api 获取所有带有延续令牌的项目
【发布时间】:2020-01-18 01:35:16
【问题描述】:

我正在尝试使用 Azure DevOps Rest Api 获取我们在带有 PowerShell 的 Azure DevOps 中的所有项目的列表。

但是,当我运行脚本时,它会不断返回 100 个项目。当我添加延续令牌时,它会循环并返回 SAME 100 个项目 4 次。所以总共给了我400个项目。我们目前有 385 个项目。

$Org = "ORGNAME" 
$personalToken = "MYTOKEN"
###################################################
Write-Host "Initialize authentication context" -ForegroundColor Yellow
$token =[System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personalToken)"))

$header = @{authorization = "Basic $token"}
$projects = $null

function get_projects {
    do
    {
        $uri="https://dev.azure.com/$Org/_apis/projects?continuationToken=$ContinuationToken&api-version=5.1"
        $ProjSets=Invoke-WebRequest -Uri $Uri -Method Get -ContentType "application/json" -Headers $header
        $continuationToken = $ProjSets.Headers.'x-ms-continuationtoken'
        $ProjectSet=$projset.content | ConvertFrom-Json
        $projects+=$ProjectSet.value
    } while ($continuationToken)
    write-host "$continuationToken" -ForegroundColor Cyan
    $projects.name
    $projects.count

}

get_projects

我希望看到 $projects.count 等于我在我的组织中拥有的项目总数,在我的情况下是 385。我似乎无法理解我哪里出错了,为什么它给了我相同的 100 个项目一遍又一遍地使用延续令牌。

【问题讨论】:

    标签: powershell azure-devops azure-devops-rest-api


    【解决方案1】:

    仍然不确定为什么 do while 循环不起作用,但我只使用下面的 while 循环就让它起作用了。

    $Org = "ORGNAME" 
    $personalToken = "MYTOKEN"
    ###################################################
    Write-Host "Initialize authentication context" -ForegroundColor Yellow
    $token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personalToken)"))
    
    $header = @{authorization = "Basic $token"}
    $projects = $null
    
    function get_projects {
        $Uri = "https://dev.azure.com/$Org/_apis/projects?continuationToken=$ContinuationToken&api-version=4"
        $ProjSets = Invoke-WebRequest -Uri $Uri -Method Get -ContentType "application/json" -Headers $header
        $continuationToken = $ProjSets.Headers.'x-ms-continuationtoken'
        $ProjectSet = $projsets.content | ConvertFrom-Json
    
        $projects = $ProjectSet.value.name
    
        while ($ContinuationToken -ne $null)
        {
            $Uri = "https://dev.azure.com/$Org/_apis/projects?continuationToken=$ContinuationToken&api-version=5.1"
            $ProjSets = Invoke-WebRequest -Uri $Uri -Method Get -ContentType "application/json" -Headers $header
            $continuationToken = $ProjSets.Headers.'x-ms-continuationtoken'
            $ProjectSet = $ProjSets.content | ConvertFrom-Json
            $projects += $ProjectSet.value.name
            $global:org_project_names = $projects
            write-host "Total number of projects = $($projects.count)"
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用$topcontinuationToken 对Azure Git Refs 进行分页。这是文档:

      https://docs.microsoft.com/en-us/rest/api/azure/devops/git/refs/list?view=azure-devops-rest-6.0

      【讨论】:

        猜你喜欢
        • 2022-08-04
        • 2021-01-31
        • 2020-11-11
        • 1970-01-01
        • 1970-01-01
        • 2019-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多