Azure-Cli 使用技巧
[TOC]
全局设置
- 介绍 Azure Cli 几个常用的参数
| 参数全称 | 参数缩写 | 搭配使用 | 功能 |
|---|---|---|---|
| --help | -h | 任意 | 查看帮助 |
| --name | -n | 任意 | 操作对象的名称 |
| --resource-group | -g | 任意 | 操作对象所属的资源组名称 |
| --output table | -o table | 常用于 list 之后 | 输出格式化,表格方式 |
| --output tsv | -o tsv | 常用于 list 之后 | 输出格式化 |
| --output none | -o none | 常用于 create 之后 | 输出格式化,创建之后不返回json内容 |
| --yes | -y | 常用于 delete 之后 | 静默方式删除 |
| --query "[].<列名>" | 无 | 常用于 list 之后 | 查询json返回值中特定列名对应的value值 |
- 注意 --query 可以同时返回多个列的value值,如下:
:: 查看全部的返回值
az account list
:: 查看单个列的返回值
az account list --query "[?isDefault].name" -o table
:: 查看多层结构的返回值
az account show --query "{user:user.name}" -o tsv
:: 查看多个列的返回值,并自定义返回列的名称
az account list --query "[].{cloudName:cloudName, Subscription:name, TenantId:tenantId}" -o table
安装与卸载
- 安装 azure-cli 2.79.0
cd /d d:\
wget -c http://iso.sqlfans.cn/cloud/azure/azure-cli-2.79.0-x64.msi
start azure-cli-2.79.0-x64.msi
- 查看版本和帮助
az version
az vm create -h
- 更新与卸载
:: 更新版本
az upgrade
:: 查看已安装的版本
winget list | findstr "Azure"
:: 卸载指定版本
winget uninstall --id "Microsoft.AzureCLI" --version 2.79.0 --force
:: 删除数据
rd /s /q C:\Users\Administrator\.azure
登入与登出 login
:: 列出可用的云,只有一个处于激活状态
az cloud list -o table
:: 切换当前激活的云端,其中 AzureChinaCloud 为世纪互联运营的中国区
:: 海外区 https://portal.azure.com
:: 中国区 https://portal.azure.cn
az cloud set --name AzureChinaCloud
az cloud set --name AzureCloud
:: 登录方式1:以交互方式登录(通常会打开浏览器)
az login
:: 登录方式2:使用租户ID登录,比如 c75dfba6-6974-49ae-9e4e-fd137a08d692
az login --tenant c75dfba6-6974-49ae-9e4e-fd137a08d692
:: 登录方式3:使用设备代码登录(可避开 WS-Trust 端点问题)https://microsoft.com/devicelogin
az login --use-device-code
:: 登录方式4:使用账号密码登录
az config set core.enable_broker_on_windows=false
az login --username <username> --password <password>
:: 清除订阅缓存,在技术上与注销Azure的过程不同
az account clear
:: 登出azure
az logout
扩展 extension
:: 列出已安装的 extension 扩展,默认无任何扩展
az extension list -o table
:: 列出所有公开可用的扩展
az extension list-available -o table
:: 列出特定扩展的详细信息
az extension list-available --show-details --query subscription
:: 列出扩展的可用版本
az extension list-versions --name subscription
:: 安装扩展,亦可指定版本
az extension add --name subscription
az extension add --name subscription --version 0.1.3
:: 升级扩展(如果已安装)
az extension add --upgrade --name subscription
:: 按名称更新扩展
az extension update --name subscription
:: 显示特定的扩展
az extension show --name subscription
:: 删除扩展
az extension remove --name subscription
订阅 account
:: 默认 az account 没有 create 子命令,需要安装扩展
az extension add --name subscription
az extension list -o table
:: 获取 enrollment-account-name,比如 44xxxx-xxxx-xxxx-xxxx-a8xxxxe
az billing enrollment-account list --query "[].name" -o tsv
:: 创建 subscription,需要安装 subscription 扩展,同时用到 enrollment-account-name
az account create --enrollment-account-name 44xxxx-xxxx-xxxx-xxxx-a8xxxxe --offer-type MS-AZR-0017P --display-name mysub
:: 查看所有账号的CloudName、订阅名、订阅ID、租户ID等
az account list --all
az account list -o table
az account show -o table
:: 查看当前登录的用户名
az account show
az account show --query "{user:user.name}" -o tsv
:: 获取当前默认的租户ID,比如 c75dfba6-6974-49ae-9e4e-fd137a08d692
az account list --query "[?isDefault].tenantId" -o tsv
:: 获取当前默认的订阅名称及订阅ID,比如 MyAzure 对应ID为 966dc049-8306-40e8-bfbb-2d2fda1f3568
az account list --query "[?isDefault].name" -o tsv
az account list --query "[?isDefault].id" -o tsv
:: 更改当前订阅,根据订阅名称或订阅ID,比如 MyAzure
az account set --subscription "MyAzure"
az account set --subscription "966dc049-8306-40e8-bfbb-2d2fda1f3568"
:: 查看azure的主要区域
az account list-locations --query "[].{Name:name, DisplayName:displayName}" -o table
资源组 group
:: 先切换订阅,若未指定订阅,则会将资源组创建到当前订阅下面
az account set --subscription "MyAzure"
:: 创建资源组,比如 MyResourceGroup
az group create --name MyResourceGroup --location eastasia --subscription MyAzure
:: 查看资源组清单
az group list -o table
:: 删除资源组
az group delete --name MyResourceGroup --yes
角色分配 role assignment
- 参考 az role assignment:https://learn.microsoft.com/zh-cn/cli/azure/role/assignment
:: 列出当前订阅id,比如 966dc049-8306-40e8-bfbb-2d2fda1f3568
az account list --query "[?isDefault].id" -o tsv
:: 列出角色分配,比如当前订阅id对应的 Scope 为 /subscriptions/966dc049-8306-40e8-bfbb-2d2fda1f3568
az role assignment list
az role assignment list -o table
az role assignment list --query "[].scope" -o tsv
az role assignment list --query "[].{RoleName:roleDefinitionName, Scope:scope}" -o table
:: 列出订阅范围内具有 Owner 角色的角色分配
az role assignment list --role Owner --scope /subscriptions/966dc049-8306-40e8-bfbb-2d2fda1f3568
:: 列出资源组(比如 MyResourceGroup)内具有 Owner 角色的用户清单
set mygroup=MyResourceGroup
set myscope=/subscriptions/966dc049-8306-40e8-bfbb-2d2fda1f3568
az role assignment list --role Owner --scope %myscope%/resourceGroups/%mygroup% --query "[].{UserName:principalName,ResourceGroup:resourceGroup,RoleName:roleDefinitionName}" -o table
:: 创建角色分配,将某用户添加到指定资源组的 Owner 角色中
set mygroup=MyResourceGroup
set myassignee=demo@anhuichaodouyaoutlook.onmicrosoft.com
set myscope=/subscriptions/966dc049-8306-40e8-bfbb-2d2fda1f3568/resourceGroups/%mygroup%
az role assignment create --assignee %myassignee% --role Owner --scope %myscope%
:: 列出角色分配的更改日志
az role assignment list-changelogs
az role assignment list-changelogs --start-time 2025-11-28T00:00:00Z --end-time 2025-11-29T23:59:59Z
az role assignment list-changelogs --query "[].{caller:caller,Action:action,ToUser:principalName,ScopeName:scopeName,RoleName:roleName,Timestamp:timestamp}" -o table
:: 从 JSON 字符串更新用户、组或服务主体的现有角色分配
az role assignment update --role-assignment assignment.json
:: 删除角色分配,将某用户从指定资源组的 Owner 角色中移除
set mygroup=MyResourceGroup
set myassignee=demo@anhuichaodouyaoutlook.onmicrosoft.com
set myscope=/subscriptions/966dc049-8306-40e8-bfbb-2d2fda1f3568/resourceGroups/%mygroup%
az role assignment delete --assignee %myassignee% --role Owner --scope %myscope%
:: 删除订阅范围内具有 Reader 角色的所有角色分配
az role assignment delete --role Reader --scope /subscriptions/00000000-0000-0000-0000-000000000000
:: 删除订阅范围内被分配者的所有角色分配
az role assignment delete --assignee 00000000-0000-0000-0000-000000000000 --scope /subscriptions/00000000-0000-0000-0000-000000000000
- 附:一个完整的角色分配的创建及清理过程,示例将 demo 用户添加到资源组 grouptemp 的 Owner 角色中
:: 创建过程,依次创建 资源组-角色分配
az group create --name grouptemp --location eastasia --subscription MyAzure -o none
az group list -o table
:: 查看当前订阅id及其对应的 scope
az account list --query "[?isDefault].id" -o tsv
az role assignment list --query "[].{RoleName:roleDefinitionName, Scope:scope}" -o table
:: 定义当前订阅id对应的 scope
set mygroup=grouptemp
set myassignee=demo@anhuichaodouyaoutlook.onmicrosoft.com
set myscope=/subscriptions/966dc049-8306-40e8-bfbb-2d2fda1f3568/resourceGroups/%mygroup%
:: 将 demo 用户添加到资源组 grouptemp 的 Owner 角色中
az role assignment create --assignee %myassignee% --role Owner --scope %myscope%
:: 确认 demo 用户对该资源组拥有 Owner 角色
az role assignment list-changelogs --query "[].{caller:caller,Action:action,ToUser:principalName,ScopeName:scopeName,RoleName:roleName,Timestamp:timestamp}" -o table
az role assignment list --role Owner --scope %myscope% --query "[].{UserName:principalName,ResourceGroup:resourceGroup,RoleName:roleDefinitionName}" -o table
:: 清理过程,依次删除 角色分配-资源组
az role assignment delete --assignee %myassignee% --role Owner --scope %myscope%
az group delete --name grouptemp --yes
虚拟网络 network vnet
- 参考 az network vnet:https://learn.microsoft.com/zh-cn/cli/azure/network/vnet
:: 列出虚拟网络 vpc
az network vnet list -o table
:: 创建虚拟网络,必须指定资源组
az network vnet create -g MyResourceGroup --name vnet-eastasia-1 --address-prefix 10.0.0.0/16 --subnet-name snet-eastasia-1 --subnet-prefixes 10.0.0.0/24
:: 删除虚拟网络,必须指定资源组
az network vnet delete -g MyResourceGroup -n vnet-eastasia-1
AD域服务 ad ds
- 2023年10月1日,Microsoft 将 Azure Active Directory (Azure AD) 更名为 Microsoft Entra ID1,以介绍产品的多云多平台功能、缓解与 Windows Server Active Directory 的混淆,并统一 Microsoft Entra 产品系列。
- 参考 ad ds:https://learn.microsoft.com/zh-cn/cli/azure/ad/ds
:: 默认 az ad ds 没有 create 子命令,需要安装扩展
az extension add --name ad
az extension list -o table
:: 列出域服务,仍在开发中,坑爹...
az ad ds list
:: 创建域服务,仍在开发中,坑爹...
az ad ds create --domain "xxx.com" --replica-sets location="East Asia" subnet-id="<subnetId>" --name "xxx.com" -g MyResourceGroup
:: 删除域服务
az ad ds delete --name "xxx.com" --resource-group "MyResourceGroup"
- 附:一个完整的域服务的创建及清理过程,示例资源组 grouptemp
:: 创建过程,依次创建 资源组-虚拟网络-域服务
az group create --name grouptemp --location eastasia --subscription MyAzure
az group list -o table
az network vnet create -g grouptemp --name vnet-eastasia-ad --address-prefix 10.0.0.0/16 --subnet-name snet-eastasia-ad --subnet-prefixes 10.0.0.0/24
az network vnet list -o table
az ad ds create --domain "xxx.com" --replica-sets location="East Asia" subnet-id="<subnetId>" --name "xxx.com" -g grouptemp
:: 清理过程,依次删除 域服务-虚拟网络-资源组
az ad ds delete --name "xxx.com" -g grouptemp
az network vnet delete --name vnet-eastasia-ad -g grouptemp
az group delete --name grouptemp --yes
资源管理
虚拟机 vm
:: 创建一个名为MyVM的虚拟机
az vm create -g MyResourceGroup -n MyVM --image UbuntuLTS --admin-username azureuser --generate-ssh-keys
:: 批量创建2台虚拟机,名字 vm_name1 vm_name2
az vm create -g MyResourceGroup -n vm_name --image centos --count 2
:: 查看虚拟机状态
az vm list --show-details
az vm list -o table
az vm list -o table -d
:: 更新某个虚拟机
az vm update -g MyResourceGroup -n vm_name --set tags.tagName=tag_name
:: 启停某个虚拟机
az vm stop -g MyResourceGroup -n vm_name
az vm start -g MyResourceGroup -n vm_name
az vm restart -g MyResourceGroup -n vm_name
:: 查看某个资源组的虚拟机
az vm list -g MyResourceGroup -o table
:: 删除一个名为MyVM的虚拟机
az vm delete -g MyResourceGroup -n vm_name --yes
数据库 mysql
:: 列出mysql
az mysql flexible-server list
应用 webapp
:: 列出所有正在运行的 web apps
az webapp list --query "[?state=='Running']"
:: 列出所有应用的名字和状态
az webapp list --query "[].{hostName: defaultHostName, state: state}"
负载均衡器 network lb
:: 列出负载均衡器
az network lb list
存储帐户 storage account
- 参考 az storage account:https://learn.microsoft.com/en-us/cli/azure/storage/account
:: 创建存储帐户
az storage account create -n mystorageaccount20251128 -g MyResourceGroup -l eastasia --access-tier Cold --kind StorageV2 --sku Standard_LRS -o none
:: 查看存储帐户
az storage account list -o table
:: 查看存储帐户,只看关心的内容
az storage account list --query "[].name" -o tsv
az storage account list --query "[].{ResourceGroup:resourceGroup, StorageAccountName:name, Kind:kind, Location:location}" -o table
:: 删除存储帐户
az storage account delete --name mystorageaccount20251128 -g MyResourceGroup --yes
文件共享 storage share-rm
- 参考 az storage share-rm:https://learn.microsoft.com/en-us/cli/azure/storage/share-rm
:: 创建存储帐户,添加 -o none 不返回结果
az storage account create -n mystorageaccount20251128 -g MyResourceGroup -l eastasia --access-tier Cold --kind StorageV2 --sku Standard_LRS -o none
az storage account list --query "[].{ResourceGroup:resourceGroup, StorageAccountName:name}" -o table
:: 创建文件共享
az storage share-rm create --name myshare -g MyResourceGroup --storage-account mystorageaccount20251128 --access-tier Cool --quota 10
:: 修改文件共享
az storage share-rm update --name myshare -g MyResourceGroup --storage-account mystorageaccount20251128 --quota 12
:: 确认共享目录
az storage share-rm list -g MyResourceGroup --storage-account mystorageaccount20251128 -o table
az storage share-rm list -g MyResourceGroup --storage-account mystorageaccount20251128 --query "[].name" -o tsv
:: 删除经典文件共享
az storage share-rm delete -g MyResourceGroup --storage-account mystorageaccount20251128 --name myshare --yes
:: 删除存储帐户
az storage account delete --name mystorageaccount20251128 -g MyResourceGroup --yes
- 附:一个完整的 SMB 协议的 Share file 创建及清理过程,示例资源组 grouptemp
注:若管理员创建了某个资源组之后,则只需将特定用户添加该资源组的 owner 角色,则该用户就可以配置文件共享,参考这里
:: 创建过程,依次创建 资源组-存储帐户-共享目录
az group create --name grouptemp --location eastasia --subscription MyAzure -o none
az group list -o table
az storage account create -n stoaccfile2025 -g grouptemp -l eastasia --access-tier Cold --kind StorageV2 --sku Standard_LRS -o none
az storage account list --query "[].{ResourceGroup:resourceGroup, StorageAccountName:name}" -o table
az storage share-rm create --name myshare -g grouptemp --storage-account stoaccfile2025 --access-tier Cool --quota 10 -o none
az storage share-rm list -g grouptemp --storage-account stoaccfile2025 --query "[].name" -o tsv
:: 清理过程,依次删除 共享目录-存储帐户-资源组
az storage share-rm delete --name myshare -g grouptemp --storage-account stoaccfile2025 --yes
az storage account delete --name stoaccfile2025 -g grouptemp --yes
az group delete --name grouptemp --yes
资源 resource
- 参考 az resource:https://learn.microsoft.com/zh-cn/cli/azure/resource
:: 列出资源
az resource list -o table
:: 通过从文件加载 JSON 配置来创建资源
az resource create -g MyResourceGroup --name myApiApp --resource-type Microsoft.web/sites --is-full-object --properties @jsonConfigFile
:: 转移资源
storageAccount=$(az resource show --resource-group $srcResourceGroupName --name $storageAccountName --resource-type Microsoft.Storage/storageAccounts --query id -o tsv) &&
az resource move --destination-group $destResourceGroupName --ids $storageAccount
:: 删除虚拟机
az resource delete -g MyResourceGroup --name MyVm --resource-type "Microsoft.Compute/virtualMachines"
:: 删除文件共享(Microsoft.FileShares)
az resource delete -g MyResourceGroup --name myshare --resource-type "Microsoft.FileShares/fileShares"
- 附:一个完整的资源转移的 创建及清理过程,示例资源组 grouptemp
:: 创建过程,依次创建 资源组-存储帐户 用于测试
az group create --name grouptemp --location eastasia --subscription MyAzure -o none
az group list -o table
az storage account create -n mystorageaccount20251128 -g grouptemp -l eastasia --access-tier Cold --kind StorageV2 --sku Standard_LRS -o none
az storage account list --query "[].{ResourceGroup:resourceGroup, StorageAccountName:name}" -o table
:: 转移过程,先获取资源id,再根据资源id将其从一个资源组移到另一个资源组
az resource show --resource-group grouptemp --name mystorageaccount20251128 --resource-type Microsoft.Storage/storageAccounts --query id -o tsv
myids=/subscriptions/******/resourceGroups/grouptemp/providers/Microsoft.Storage/storageAccounts/mystorageaccount20251128
az resource move --destination-group MyResourceGroup --ids $myids
:: 清理过程,依次删除 存储帐户-资源组
az storage account delete --name mystorageaccount20251128 -g MyResourceGroup --yes
az group delete --name grouptemp --yes
1. Azure Active Directory 的新名称:https://learn.microsoft.com/zh-cn/entra/fundamentals/new-name ↩