Azure DevOps Rest Api 以获取具有延续令牌的所有项目

Azure DevOps Rest Api to get all projects with continuation token

我正在尝试使用 Azure DevOps Rest Api.

通过 PowerShell 获取我们在 Azure DevOps 中的所有项目的列表

但是,当我 运行 脚本时,它一直返回 100 个项目。当我添加延续令牌时,它会循环并 returns 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 个项目一遍又一遍地使用延续令牌。

仍然不确定为什么 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)"
    }
}

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

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