我正在尝试使用 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 时不起作用的帮助将不胜感激。
最初,我在 DevOps 门户中使用“完全访问权限”生成了 PAT 令牌,如下所示:
现在,我运行下面的 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
同样,您可以使用以下脚本使用 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
为了
确认,我在 Azure DevOps 门户中检查了相同的内容,其中变量组已成功导入,如下所示:
如果错误仍然存在,请尝试使用
完全访问创建新的 PAT 令牌,并使用上述脚本调用 DevOps REST API。
参考:如何从 PowerShell 调用 Azure Devops REST API (opentechguides.com)