在Azure DevOps管道中,在执行az登录时,在powershell任务中使用变量会导致ArgumentParseError

在Azure DevOps管道中,在执行az登录时,在powershell任务中使用变量会导致ArgumentParseError,azure,powershell,azure-devops,azure-pipelines,azure-service-principal,Azure,Powershell,Azure Devops,Azure Pipelines,Azure Service Principal,我的管道中有一个Powershell任务: - task: PowerShell@2 inputs: targetType: 'inline' script: | az login --service-principal --username $env:servicePrincipalId --password $env:servicePrincipalKey --tenant $env:tenantId python $(Build.SourcesD

我的管道中有一个Powershell任务:

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      az login --service-principal --username $env:servicePrincipalId --password $env:servicePrincipalKey --tenant $env:tenantId
      python $(Build.SourcesDirectory)/the/path/to/my/python/script.py
  displayName: 'Execute Python code'
在执行此Powershell任务之前,在AzureCLI任务中使用
addSpnToEnvironment:true
向我提供服务主体详细信息

当Powershell任务运行时,我得到
ArgumentParseError:参数--username/-u:应为一个参数
。如何解决此问题?

我建议您使用以下方法:

使用此任务在Azure环境中运行PowerShell脚本。Azure上下文通过提供的Azure资源管理器服务连接进行身份验证


我建议您使用以下方法:

使用此任务在Azure环境中运行PowerShell脚本。Azure上下文通过提供的Azure资源管理器服务连接进行身份验证


检查密码值是否以字符“
-
”开头

这是由前导字符“
-
”引起的已知问题,它使参数解析器将其作为选项名混淆。看

作为一种解决方法,您可以通过在选项名称和值之间添加“
=
”来解决此问题

az login --service-principal --username=$env:servicePrincipalId --password=$env:servicePrincipalKey --tenant=$env:tenantId
此外,您还可以尝试以下方法:

  • 此问题应已在最新版本的Azure CLI中修复,您可以尝试在代理计算机上将Azure CLI升级到最新版本

  • 请按照@Krzysztof Madej的建议使用,并通过设置授权


检查密码值是否以字符“
-
”开头

这是由前导字符“
-
”引起的已知问题,它使参数解析器将其作为选项名混淆。看

作为一种解决方法,您可以通过在选项名称和值之间添加“
=
”来解决此问题

az login --service-principal --username=$env:servicePrincipalId --password=$env:servicePrincipalKey --tenant=$env:tenantId
此外,您还可以尝试以下方法:

  • 此问题应已在最新版本的Azure CLI中修复,您可以尝试在代理计算机上将Azure CLI升级到最新版本

  • 请按照@Krzysztof Madej的建议使用,并通过设置授权


您不应该使用$env:而不是$env吗?抱歉,我刚刚意识到我在实际管道中确实使用了$env:。将其打印为$env。这里是事故现场。编辑我的问题以反映这一点。我发现在排除这些错误时,真正有用的是将以下几个任务分散在管道中(因为变量的作用域是有限的,所以可能不存在于所有任务中,具体取决于您使用阶段、作业等的方式)-pwsh:“Get ChildItem env:”displayName:“Display variables”您不应该使用$env:而不是$env吗?抱歉,我刚刚意识到我在实际管道中确实使用了$env:。将其打印为$env。这里是事故现场。编辑我的问题以反映这一点。我发现在排除这些错误时,真正有用的是将以下几个任务分散在管道中(因为变量的作用域是有限的,所以可能不存在于所有任务中,具体取决于您使用阶段、作业等的方式)-pwsh:“Get ChildItem env:”displayName:“Display variables”因此,我尝试将此建议与@Krzysztof Madej使用Azure PowerShell的建议结合使用。这确实让我更进一步,但现在我得到了以下错误:
#[error]无法解析租户“”
。创建Azure资源管理器服务连接时,是否尝试使用“
服务主体(手动)
”方法?此方法允许您指定租户和服务主体。确保您已填写正确的
服务主体Id
服务主体密钥
租户Id
。因此我尝试将此建议与@Krzysztof Madej使用Azure PowerShell的建议结合使用。这确实让我更进一步,但现在我得到了以下错误:
#[error]无法解析租户“”
。创建Azure资源管理器服务连接时,是否尝试使用“
服务主体(手动)
”方法?此方法允许您指定租户和服务主体。确保您已填写正确的
服务主体Id
服务主体密钥
租户Id