【发布时间】:2018-06-18 20:25:12
【问题描述】:
我正在尝试使用此处编写的 power shell 从 VSTS 获取构建列表https://docs.microsoft.com/en-us/rest/api/vsts/build/builds/list?view=vsts-rest-4.1 我的 uri 是:
https://tfs.*****.com/STS/FORIS_Mobile/_apis/build/builds?api-version=4.1&definitions=6331&statusFilter=completed&resultFilter=succeeded&tagFilters='Rejected'&maxBuildsPerDefinition=1&queryOrder=finishTimeDescending
我发送这样的请求:
$buildsOverview = Invoke-WebRequest -UseDefaultCredentials -Uri $buildsUrl | ConvertFrom-Json
我有没有过滤器 definitions=6331 和 tagFilters='Rejected' 的结果。
我对这个请求做错了什么?
UPD 下面是 $buildsUrl 的构造方式:
$buildsUrlBase = "$tfsConnectString/$teamProjectName/_apis/build/builds?api-version=4.1"
$buildsUrlBase = "$buildsUrlBase&definitions=" + $definitionIds.ToString() + "&statusFilter=completed&resultFilter=succeeded&maxBuildsPerDefinition=$BuildsPerDef&queryOrder=finishTimeDescending"
if ([string]::IsNullOrEmpty($buildQuality) -ne $true)
{
$buildsUrlBase = "$buildsUrlBase&tagFilters='$buildQuality'"
}
$buildsUrlBase = [System.Uri]::EscapeUriString($buildsUrlBase)
带有我的构建定义 ID 的实际字符串在问题中。
我也尝试过使用 Invoke-RestMethod:
$buildsOverview = Invoke-RestMethod -Uri $buildsUrl -Method Get -ContentType "application/json-patch+json" -UseDefaultCredential
但结果相同
【问题讨论】:
-
能否请您说明您如何影响变量 $buildsUrl ?您还应该使用 Invoke-RestMethod(不带 ConvertFrom-Json)直接获取对象。
-
这里是 $buildsUrl 的构建方式: $buildsUrlBase = "$tfsConnectString/$teamProjectName/_apis/build/builds?api-version=4.1" $buildsUrlBase = "$buildsUrlBase&definitions=" + $definitionIds. ToString() + "&statusFilter=completed&resultFilter=succeeded&maxBuildsPerDefinition=$BuildsPerDef&queryOrder=finishTimeDescending" if ([string]::IsNullOrEmpty($buildQuality) -ne $true) { $buildsUrlBase = "$buildsUrlBase&tagFilters='$buildQuality'" } $buildsUrlBase = [System.Uri]::EscapeUriString($buildsUrlBase) 带有我的构建定义 id 的实际字符串在问题中。
-
我也尝试过使用 Invoke-RestMethod: $buildsOverview = Invoke-RestMethod -Uri $buildsUrl -Method Get -ContentType "application/json-patch+json" -UseDefaultCredential 但结果相同
-
不知道是不是问题,但是当我通过 Chrome 中的第一个 URL 时,
'字符被转换为%27。但是 EscapeUriString 并没有这样做。您可以尝试使用$buildsUrlBase = "$buildsUrlBase&tagFilters=%27$buildQuality%27"并取消$buildsUrlBase = [System.Uri]::EscapeUriString($buildsUrlBase)行。 -
它给我同样的结果,两个过滤器
definitions=6331和tagFilters=%27Rejected%27都不起作用
标签: powershell azure-devops azure-devops-rest-api