无法通过PAT令牌调用Azure DevOps Rest Api

问题描述 投票:0回答:1

我正在尝试使用 Azure DevOps Rest api 将保存在本地目录(桌面)中的 json 文件导入到 Azure DevOps 库变量组。

这是剧本。

$jsonbody = Get-Content -Path "C:\variable\1.json" | Out-String
# Define organization name and PAT
$organization = ""
$token = "{PAT}"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$url="https://dev.azure.com/$organization/_apis/distributedtask/variablegroups?api-version=7.1-preview.2"
$head = @{ Authorization =" Basic $token" }
Invoke-RestMethod -Uri $url -Method Post -Headers $head -Body $jsonbody -ContentType application/json

这是我收到的错误消息。

Invoke-RestMethod:远程服务器返回错误:(401) 未经授权。在行:6 字符:1 + Invoke-RestMethod -Uri $url -Method 帖子-标题 $head -正文 $jsonbo ... +

+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod],
WebException + FullyQualifiedErrorId :
WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

我尝试了不同的rest api,但收到了相同的错误消息。

    $jsonbody = Get-Content -Path "C:\variable\1.json" | Out-String
    # Define organization name and PAT
    $organization = ""
    $token = "{PAT}"
    $token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
    $url="https://dev.azure.com/$organization/_apis/projects?api-version=7.1-preview.4"
    $head = @{ Authorization =" Basic $token" }
Invoke-RestMethod -Uri $url -Method GET -Headers $head -ContentType application/json

PAT 令牌具有完全访问权限。

这些是我遵循的文件。

我可以使用相同的 PAT 令牌将包发布到 Azure DevOps artefact feed(Nuget 和 NPM)。

任何关于为什么 PAT 令牌在使用 REST API 时不起作用的帮助将不胜感激。

azure azure-devops azure-devops-rest-api
1个回答
0
投票

最初,我在 DevOps 门户中使用“完全访问权限”生成了 PAT 令牌,如下所示:

enter image description here现在,我运行下面的 PowerShell 脚本来通过 PAT 令牌调用 Azure DevOps Rest API 来

列出项目

$orgUrl = "https://dev.azure.com/org_name" $pat = "xxxxxxxxxxxxxxxxxxxxxxx" $queryString = "api-version=7.1-preview.4" $token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($pat)")) $header = @{Authorization = "Basic $token"} $projectsUrl = "$orgUrl/_apis/projects?$queryString" $projects = Invoke-RestMethod -Uri $projectsUrl -Method Get -ContentType "application/json" -Headers $header $projects.value | ConvertTo-Json

回复:

enter image description here同样,您可以使用以下脚本使用 Azure DevOps Rest Api 将保存在本地目录中的 Json 文件导入到 Azure DevOps 库变量组:

$jsonbody = Get-Content -Path "C:\variables\var.json" | Out-String $orgUrl = "https://dev.azure.com/org_name" $pat = "xxxxxxxxxxxxxxxxx" $queryString = "api-version=7.1-preview.2" $token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($pat)")) $header = @{Authorization = "Basic $token"} $Url = "$orgUrl/_apis/distributedtask/variablegroups?$queryString" $result = Invoke-RestMethod -Uri $Url -Method Post -Body $jsonbody -ContentType "application/json" -Headers $header $result.variableGroupProjectReferences

回复:

enter image description here为了

确认

,我在 Azure DevOps 门户中检查了相同的内容,其中变量组已成功导入,如下所示:

enter image description here如果错误仍然存在,请尝试使用

完全访问

创建新的 PAT 令牌,并使用上述脚本调用 DevOps REST API。

参考:

如何从 PowerShell 调用 Azure Devops REST API (opentechguides.com)

© www.soinside.com 2019 - 2024. All rights reserved.