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

Azure Pipeline:PowerShell执行az命令需认证,Azure CLI无需的原因与解决

问题原因

AzureCLI@2任务会在执行脚本前,自动通过你指定的azureSubscription服务连接完成Azure CLI的身份验证,所以直接运行az命令时已处于登录状态。

而AzurePowerShell@5任务仅负责为PowerShell的Az模块配置认证上下文,不会自动处理Azure CLI的登录。当你在这个任务里调用az命令时,Azure CLI未经过认证,因此会提示需要执行az login。

解决方案

方法1:在AzurePowerShell任务中手动完成Azure CLI认证

利用AzurePowerShell任务已获取的服务主体凭据,手动为Azure CLI配置登录:

- task: AzurePowerShell@5
  inputs:
    azureSubscription: $(serviceConnectionName)
    azurePowerShellVersion: LatestVersion
    ScriptType: 'InlineScript'
    Inline: |
      # 从当前Az上下文提取服务主体信息
      $azContext = Get-AzContext
      $tenantId = $azContext.Tenant.Id
      $clientId = $azContext.Account.Id
      # 注意:服务主体密钥需提前存储在密钥保管库或Azure DevOps保密变量中
      $clientSecret = (Get-AzKeyVaultSecret -VaultName "你的密钥保管库名称" -Name "服务主体密钥名称").SecretValueText

      # 登录Azure CLI
      az login --service-principal -u $clientId -p $clientSecret --tenant $tenantId
      # 执行目标命令
      az ad app list --all

方法2:直接使用AzureCLI@2任务执行命令

如果仅需运行Azure CLI命令,优先使用AzureCLI@2任务,它会自动处理认证,无需额外配置,就像你最初成功的示例那样。

方法3:改用PowerShell Az模块命令替代Azure CLI命令

既然使用AzurePowerShell任务,推荐直接用Az模块的对应命令,利用任务已配置好的认证上下文:

- task: AzurePowerShell@5
  inputs:
    azureSubscription: $(serviceConnectionName)
    azurePowerShellVersion: LatestVersion
    ScriptType: 'InlineScript'
    Inline: |
      # 替代az ad app list --all的PowerShell命令
      Get-AzADApplication -All $true

该命令功能与az ad app list --all完全一致,且无需额外认证步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:59:54