You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell轮换Azure DevOps PAT遇登录页面问题及交互式登录咨询

Azure DevOps PAT轮换脚本问题解答

1. 当前实现思路是否正确?

不正确。核心问题有两点:

  • az devops login的认证上下文不会自动传递给Invoke-RestMethod,导致调用PAT生成API时未携带有效认证信息,服务器返回登录页面HTML。
  • 代码中未定义$headers变量,缺少认证头参数,无法完成API身份校验。

正确方向:

  • 优先使用Azure CLI内置命令生成PAT,无需手动调用REST API,逻辑更可靠;
  • 若坚持使用REST API,需先通过交互式登录获取有效的Azure AD访问令牌,将其作为Bearer认证头传递给API接口。

2. 实现交互式登录并生成PAT的方案

方案一:Azure CLI直接生成(推荐)

Azure CLI已封装PAT生成逻辑,交互式登录后可直接生成:

# 交互式登录目标Azure DevOps组织
az devops login --organization "https://dev.azure.com/$organization"

# 生成指定权限和有效期的PAT
$newPat = az devops pat create `
    --organization "https://dev.azure.com/$organization" `
    --display-name "$organization 自动轮换PAT" `
    --scope "vso.build vso.code_full vso.tokens vso.profile" `
    --valid-to ((Get-Date).AddDays(7).ToString("yyyy-MM-dd")) `
    --query 'patToken.token' `
    --output tsv

# 输出并保存PAT
Write-Output "新PAT: $newPat"
$newPat | Out-File "$env:USERPROFILE\Downloads\new_pat.txt" -Encoding UTF8

方案二:PowerShell交互式登录+REST API

若需手动调用REST API,先通过Azure AD交互式登录获取令牌,再完成PAT生成:

$organization = "你的组织名称"
$apiVersion = "7.1-preview.1"

# 交互式登录Azure AD(需提前安装Az模块)
Connect-AzAccount -UseDeviceAuthentication
$accessToken = (Get-AzAccessToken -ResourceUrl "https://vssps.dev.azure.com").Token

# 构造认证请求头
$headers = @{
    "Authorization" = "Bearer $accessToken"
    "Content-Type"  = "application/json"
}

# 构造PAT生成请求体
$body = @{
    displayName = "$organization 自动轮换PAT"
    scope       = "vso.build vso.code_full vso.tokens vso.profile"
    validTo     = (Get-Date).AddDays(7).ToString("yyyy-MM-ddTHH:mm:ssZ")
    allOrgs     = $false
} | ConvertTo-Json

# 调用REST API生成PAT
$response = Invoke-RestMethod `
    -Uri "https://vssps.dev.azure.com/$organization/_apis/tokens/pats?api-version=$apiVersion" `
    -Headers $headers `
    -Method Post `
    -Body $body `
    -ContentType "application/json"

# 输出并保存结果
$newPat = $response.patToken.token
Write-Output "新PAT: $newPat"
$response | ConvertTo-Json -Depth 2 | Out-File "$env:USERPROFILE\Downloads\patgenoutput.json" -Encoding UTF8

注意事项

  • 方案二需提前安装Az模块:Install-Module -Name Az -AllowClobber -Scope CurrentUser
  • 生成的PAT仅会返回一次,务必妥善保存,丢失后无法找回。

内容的提问来源于stack exchange,提问作者yasouser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:05:12