在 Azure Powershell 任务中使用 Azure CLI

Ale*_*AIT 6 azure-powershell azure-cli azure-devops azure-pipelines azure-pipelines-release-pipeline

我想创建一个 Powershell 脚本,该脚本执行一些AzureRm...命令并使用一些Az命令跟进这些命令。原因是某些命令只能通过Az.

尝试在发布管道中执行这些脚本时,脚本总是失败并显示以下错误:

ERROR: Please run 'az login' to setup account.
Run Code Online (Sandbox Code Playgroud)

执行任务中的Az命令Azure CLI按预期工作,因为Az Login由任务执行。

如果可能的话,我不想传递登录脚本所需的秘密。我宁愿退回到将脚本分成管道中的两个步骤。

是否可以AzAzure Powershell不手动传递机密的情况下在任务中使用命令?

最小的例子:

  • 创建新的发布管道
  • 添加任务 Azure PowerShell
  • 使用内联脚本
  • 作为脚本,执行 az account show

Ale*_*AIT 2

我已经制定的短期解决方案是将 ServicePrincipal 信息传递到 powershell 脚本中并az login手动执行(与下面 Bevan 的答案相同)。

我的长期解决方案是用“Az Powershell”命令替换所有 Azure CLI 调用。幸运的是,大多数命令现在都可用。

有几个命令没有等效的命令行开关。但如果它们可以通过 ARM 获得,您可以使用 Powershell 找出替代命令。

其中许多涉及使用New-AzResource/New-AzureRmResourceInvoke-AzResourceAction/Invoke-AzureRmResourceAction

# AzureCLI
az cosmosdb list-keys
# Powershell:
$keys = Invoke-AzResourceAction -Action listKeys `
    -ResourceType "Microsoft.DocumentDb/databaseAccounts" -ApiVersion "2015-04-08" `
    -ResourceGroupName $resourceGroupName -Name $accountName
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,我们可以将 `--debug` 传递给 `az` 命令,以找出它在幕后调用的到底是哪个 API 方法。然后,使用“Invoke-AzResourceAction”重现它。 (2认同)