你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

成功使用 Azure CLI 的提示

Azure CLI 是一种命令行工具,可用于配置和管理来自许多 shell 环境的 Azure 资源。 选择首选 shell 环境安装 Azure CLI 后,请使用本文来发现有关如何避免常见陷阱并成功使用 Azure CLI 的有用提示。

若要详细了解特定的 Azure CLI 命令,请参阅 Azure CLI 参考列表

选择脚本语言

Azure CLI 是一个开放源代码工具,可在许多脚本语言中运行。

  • 它是用于确定 Azure CLI 命令的引用、转义字符和行延续规则的脚本语言。
  • 复制包含单引号或双引号、转义字符或语言之间的行延续字符的 Azure CLI 命令语法可能很困难。
  • Azure CLI 的大多数Microsoft文档都是在 Bash 中编写和测试的。
  • 如果 PowerShell 是所选脚本语言,请考虑使用具有本机 PowerShell 脚本语言功能的工具 Azure PowerShell

有关 Azure CLI 的脚本语言选项的详细信息,请参阅 选择正确的命令行工具

常见问题解答

下面是一些链接,可帮助你回答最常见的 Azure CLI 问题:

主题区域与文章链接 提示
代理背后的工作 有关如何通过代理服务器工作的信息。
Web 客户经理 (WAM) 有关 WAM 以及如何禁用它的信息。
配置设置 可用的 Azure CLI 配置设置列表、如何打开/关闭 Azure CLI 功能并设置默认值。
输出格式 有关如何将 Azure 资源 ID 存储在变量中以及保护 Azure CLI 命令返回的机密的说明。
在字符串中传递 JSON 值 引用 JSON 参数值的示例。
支持生命周期 有关 Azure CLI 版本和依赖项支持的操作系统、脚本语言和服务结束的信息。
REST API 当特定 Azure CLI 命令不适用于 Azure 资源时,要使用的替代 az rest 命令。
Azure CLI 参考组 Azure CLI 引用组的 to Z 列表,向下钻取到子组和所有 Azure CLI 命令。
Azure CLI 文章 使用 Azure CLI 参考命令的快速入门、操作指南和教程的 A to Z 列表。 列表按引用组和子组进行分组,便于搜索。
Azure CLI 示例 示例的 to Z 列表,包括 Azure-samples/azure-cli-samples GitHub 存储库中的这些示例。
故障排除 错误原因和修正提示。
新增功能 新 Azure CLI 功能的简短摘要。

将值传递给其他命令

如果某个值被多次使用,请将它分配给一个变量。 通过变量,你可以多次使用值或创建更多通用脚本。 此示例将 az vm list 命令找到的一个 ID 分配给一个变量。

# assign the list of running VMs to a variable
running_vm_ids=$(az vm list --resource-group MyResourceGroup --show-details \
    --query "[?powerState=='VM running'].id" --output tsv)

# verify the value of the variable
echo $running_vm_ids

如果某个值只使用一次,请考虑使用管道。 (管道将一个命令的输出作为输入传递给第二个命令。

az vm list --query "[?powerState=='VM running'].name" --output tsv | grep my_vm

对于多值列表,请考虑以下选项:

  1. 如需加强对结果的控制,请使用“for”循环:
#!/usr/bin/env bash
for vmList in $(az vm list --resource-group MyResourceGroup --show-details --query "[?powerState=='VM running'].id"   -output tsv); do
    echo stopping $vmList
    az vm stop --ids $vmList
    if [ $? -ne 0 ]; then
        echo "Failed to stop $vmList"
        exit 1
    fi
    echo $vmList stopped
done
  1. 或者,使用 xargs,并考虑使用 -P 标志来并行运行操作以提高性能:
az vm list --resource-group MyResourceGroup --show-details \
    --query "[?powerState=='VM stopped'].id" \
    --output tsv | xargs -I {} -P 10 az vm start --ids "{}"
  1. 最后,Azure CLI 具有内置支持,可并行处理具有多个 --ids 的命令,以实现 xargs 的相同效果。 @- 用于从管道获取值:
az vm list --resource-group MyResourceGroup --show-details \
    --query "[?powerState=='VM stopped'].id" \
    --output tsv | az vm start --ids @-

有关将 Bash 构造与 Azure CLI 配合使用的详细信息,包括循环、case 语句、if..then..else 以及错误处理,请参阅了解如何将 Bash 与 Azure CLI 配合使用

常见更新参数

Azure CLI 命令组通常使用 update 命令。 例如,Azure 虚拟机包括 az vm update 命令。 大多数更新命令提供三个常见参数:--add--set--remove

--set--add 参数采用以空格分隔的键值对列表:key1=value1 key2=value2。 若要查看可更新的属性,请使用 show 命令,如 az vm show

az vm show --resource-group VMResources --name virtual-machine-01

若要简化此命令,请考虑使用 JSON 字符串。 例如,若要将新的数据磁盘附加到虚拟机,请使用以下值:

az vm update --resource-group VMResources --name virtual-machine-01 \
--add storageProfile.dataDisks "{\"createOption\": \"Attach\", \"managedDisk\":
   {\"id\":
   \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/yg/providers/Microsoft.Compute/disks/yg-disk\"},
   \"lun\": 1}"

通用资源命令

想要使用的服务可能没有 Azure CLI 支持。 可以使用 az resourceaz rest 命令处理这些资源。

并发执行

如果在同一台计算机上并发运行 Azure CLI 命令,如果多个 Azure CLI 命令写入同一Microsoft身份验证库(MSAL)令牌缓存,则会发生写入冲突。

为了避免潜在的故障,请通过将每个脚本的环境变量 AZURE_CONFIG_DIR 设置为单独的目录来隔离每个脚本的 Azure CLI 配置文件夹。 该脚本中的 Azure CLI 命令会将配置和令牌缓存保存到配置的位置,而不是默认 ~/.azure 文件夹。

export AZURE_CONFIG_DIR=/my/config/dir

异步操作

Azure 中的操作可能需要花费很长时间。 例如,在数据中心配置虚拟机不是即时的。 Azure CLI 会等待命令完成以接受其他命令。 因此,许多命令提供 --no-wait 参数,如下所示:

az group delete --name MyResourceGroup --no-wait

删除资源组时,属于该资源组的所有资源也会被删除。 删除这些资源可能需要较长时间。 使用 --no-wait 参数运行命令时,控制台会在不中断删除操作的情况下接受新命令。

许多命令都提供等待选项,可在满足某些条件之前暂停控制台。 下面的示例使用 az vm wait 命令支持并行创建独立资源:

az vm create --resource-group VMResources --name virtual-machine-01 --image centos --no-wait
az vm create --resource-group VMResources --name virtual-machine-02 --image centos --no-wait

subscription=$(az account show --query "id" -o tsv)
vm1_id="/subscriptions/$subscription/resourceGroups/VMResources/providers/Microsoft.Compute/virtualMachines/virtual-machine-01"
vm2_id="/subscriptions/$subscription/resourceGroups/VMResources/providers/Microsoft.Compute/virtualMachines/virtual-machine-02"
az vm wait --created --ids $vm1_id $vm2_id

创建这两个 ID 后,你可以再次使用控制台。

脚本示例

下面是使用 Azure 虚拟机时使用变量并循环访问列表的示例。 有关将 Bash 构造与 Azure CLI 配合使用的深度示例,包括循环、case 语句、if..then..else 以及错误处理,请参阅了解如何将 Bash 与 Azure CLI 配合使用

使用这些脚本将 ID 保存到变量:

ECHO OFF
SETLOCAL
FOR /F "tokens=* USEBACKQ" %%F IN (
   `az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv`
) DO (
    SET "vm_ids=%%F %vm_ids%"  :: construct the id list
)
az vm stop --ids %vm_ids% :: CLI stops all VMs in parallel

使用这些脚本循环访问列表:

ECHO OFF
SETLOCAL
FOR /F "tokens=* USEBACKQ" %%F IN (
    `az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv`
) DO (
    ECHO Stopping %%F
    az vm stop --ids %%F
)

另请参阅