Azure DevOps Rest Api获取所有项目及续传令牌

5
我正在尝试使用Azure DevOps Rest Api和PowerShell获取我们在Azure DevOps中的所有项目列表。
但是,当我运行脚本时,它一直返回100个项目。当我添加续订令牌时,它会循环并4次返回相同的100个项目。因此,总共给我返回了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个带有续订令牌的项目。
2个回答

4

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

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接