powershell - Azure DevOps Rest Api 获取所有带有延续令牌的项目
问题描述
我正在尝试使用 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 个项目再次使用延续令牌。
解决方案
仍然不确定为什么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)"
}
}
推荐阅读
- javascript - 如何通过class或id使用内部标签在纯js中拖放整个元素?
- ruby-on-rails - 如何修复:Mongo::Error::OperationFailure
- python-3.x - 如何在 Mac m1 上使用自制软件安装 python 3.9.6
- python - 我怎样才能使这个 web3 python 脚本更快?
- debian - 无法使用 Snap 方法安装 certbot
- python - 熊猫正常运行时间到日期时间并重置为正常运行时间
- ruby-on-rails - 如何使硒网络驱动程序单击反应聚光灯内的按钮(React Joyride)?
- apache-superset - 如何在 apache 超集中显示/显示静态 HTML 文件?
- php - 为每个 PHP 排序数据 - Codeigniter
- javascript - 当 API 调用不是以“https://”开头时,为什么 axios 库无法发出请求?