首页 > 解决方案 > Azure devops rest api 仅返回 100 个项目

问题描述

我正在尝试从我的组织中检索所有项目我有 300 个项目但 api 调用仅返回 100

我尝试将 $top 与 api 一起使用,然后它什么也不返回

这是我的脚本,可用于获取 100 个项目并转换为 csv 文件,但我需要此 csv 文件中所有 300 个项目的详细信息 -

connectionToken = ""
$BaseUrl = "https://dev.azure.com/{organization_name}/_apis/projects?api- 
versions=5.0"
$base64AuthInfo = 
[System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes
(":$($connectionToken)"))

$ProjectInfo = Invoke-RestMethod -Uri $BaseUrl -Headers @{authorization = 
"Basic $base64AuthInfo"} - Method Get

$ProjectDetails = $ProjectInfo | ConvertTo-Json -Depth 100 | out-file 
"/list.json"

$ProjectList = Get-Content "/list.json" -Raw | ConvertFromJson | select - 
Expand value | Export-CSV "list.csv"

我也尝试使用 invoke-webrequest 它也没有返回任何内容

谢谢

标签: powershellazure-devopsazure-devops-rest-api

解决方案


Azure devops rest api 仅返回 100 个项目

答案是使用指定$top参数。

但是在powershell中使用这个参数时,我们需要注意转义$by `而不是&。

那是因为在powershell中,单引号''在任何情况下都只代表引号内的字符。换句话说,单引号内的内容不会被变量和转义字符替换。在双引号""中,允许变量替换和字符转义。

当您使用双引号时BaseUrl:</p>

$BaseUrl = "https://dev.azure.com/{organization_name}/_apis/projects?api-versions=5.0"

$如果我们添加$top=300而不是&在那个 URL 中,我们需要转义字符。

所以,BaseUrl应该是:

$BaseUrl = "https://dev.azure.com/{organization_name}/_apis/projects?`$top=300&api-version=5.0"

或者您可以对 URL 使用单引号:

$BaseUrl = 'https://dev.azure.com/{organization_name}/_apis/projects?$top=300&api-version=5.0'

在 PowerShell 中查看文档Escaping:</p>

PowerShell 转义字符是反引号“`”字符。

下面是我的测试结果:

在此处输入图像描述


推荐阅读