在本地使用 PowerShell 获取分支上的 Azure DevOps 最后构建 ID

hsi*_*sim 3 powershell azure-devops azure-devops-rest-api

出于开发目的,我们需要通过 Visual Studio 在本地启动 PowerShell 脚本,其任务是获取特定分支的最后一个构建 ID。

到目前为止,我已经尝试了很多基于此的选择:

$WebClient = New-Object Net.WebClient
Write-Host "Downloading patches and binaries"

Write-Host "Get ID"

$url = "https://oldrepo.visualstudio.com/ProjectA/_apis/build/latest/14?branchName=master"
$result = $WebClient.DownloadString($url)

Write-Host $result
Run Code Online (Sandbox Code Playgroud)

但是,该result值返回 azure 的登录页面,而不是我的存储库。如果我将相同的网址粘贴到浏览器中,我确实会得到好的页面。

我认为请求中传递了某种 cookie/AD 凭据,但我没有通过开发人员工具看到任何相关内容。

我尝试手动设置 WebClient 对象的凭据,如下所示:

#$creds = Get-Credential -UserName "User" -Message "Login"
#$WebClient.Credentials = $creds
#$WebClient.UseDefaultCredentials = $true
Run Code Online (Sandbox Code Playgroud)

但无济于事。我缺少什么?

Sha*_*zyk 5

我用来Invoke-RestMethod获取 Azure DevOps Rest API 响应,您需要使用个人访问令牌进行身份验证:

$token = "YOUR-PAT" 
$base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$token))) 
$header = @{Authorization=("Basic {0}" -f $base64Auth)} 
$url = "https://oldrepo.visualstudio.com/ProjectA/_apis/build/latest/14?branchName=master" 
$result = Invoke-RestMethod -Uri $url -Method Get -ContentType application/json -Headers $header
Run Code Online (Sandbox Code Playgroud)