powershell - Azure DevOps Rest Api 以获取具有延续 token 的所有项目

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

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

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

最佳答案

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

关于powershell - Azure DevOps Rest Api 以获取具有延续 token 的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57969982/

相关文章:

powershell - 如何记录运行的 PowerShell 命令

powershell - 触摸命令在 VSC 终端中不起作用

azure - 如何从 Visual Studio 禁用应用程序服务的手动部署

Azure Artifacts - 下载特定版本的 Maven 工件

Powershell cmdlet 输出未显示

c# - 在 powershell 和 C# 之间共享变量

azure - 致力于自动化以批准来自逻辑应用程序流的拉取请求

Azure DevOps Pipeline - 推送到 Azure 容器注册表 - 权限错误

azure-devops - 使用 REST API 访问 Azure Dev Ops/VSTS 工件中的文件内容

azure-devops - 通过 REST API 访问 PBI 上的 "Remaining Work"