如何在Azure DevOps任务中同时认证Az PowerShell与Azure CLI?
在同一Azure DevOps任务中同时使用已认证的Az PowerShell和Azure CLI
完全可以实现,无需拆分任务,在Azure PowerShell任务中通过以下两种方式让Azure CLI自动完成认证:
方法1:利用Az模块获取的访问令牌登录CLI
兼容性强,适用于绝大多数Microsoft托管代理环境:
# 获取当前Az上下文绑定的订阅ID $subscriptionId = (Get-AzContext).Subscription.Id # 获取Azure资源管理器的访问令牌 $armToken = (Get-AzAccessToken -ResourceUrl "https://management.azure.com/").Token # 用服务主体+令牌完成CLI无界面登录 az login --service-principal ` --username $env:AZURE_CLIENT_ID ` --password $armToken ` --tenant $env:AZURE_TENANT_ID # 切换到当前订阅 az account set --subscription $subscriptionId
说明
$env:AZURE_CLIENT_ID、$env:AZURE_TENANT_ID是Azure PowerShell任务基于你选择的Azure服务连接自动注入的环境变量- 直接复用Az模块已完成的认证流程生成的令牌,无需额外配置凭据
方法2:同步Az上下文到CLI(更简洁,推荐)
如果托管代理上的Az.Accounts模块版本≥2.2.0,可直接用内置命令同步认证上下文:
# 导入Az.Accounts模块(托管代理默认预装) Import-Module Az.Accounts # 将Az PowerShell的认证上下文转换为CLI可识别的格式 ConvertTo-AzContextToAzureCliContext -Context (Get-AzContext)
说明
- 该命令会自动把Az模块的认证信息写入CLI本地配置,后续所有
az命令都会沿用此认证上下文 - 无需手动处理令牌或环境变量,一步完成同步
注意事项
- 确保Azure PowerShell任务的Azure连接类型选择「Azure资源管理器」,且对应服务连接拥有执行CLI操作的足够权限
- Microsoft托管代理默认已预装Az模块和Azure CLI,无需额外安装
- 若遇CLI版本兼容问题,可在脚本开头添加
az upgrade --yes(需谨慎操作,可能影响代理环境)
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

