如何通过单个PowerShell命令或脚本批量清理多个Azure资源?
Azure 闲置资源批量删除操作指南
方案1:单条命令批量删除多个资源
az resource delete 本身支持传入多个资源ID实现单次命令批量删除,不需要循环调用。
- 操作步骤:
- 切换到目标订阅和默认资源组(你已完成的前置操作可直接复用)
对应命令参考:az account set -s <subscription_ID>az configure --defaults group=<目标资源组名> - 导出要删除的资源ID列表,如果你已经明确要删除的资源名称,可通过查询命令批量提取ID:
示例命令(查询指定名称的资源ID,输出为TSV格式):az resource list --query "[?name=='testvnet' || name=='testvm' || name=='teststorage'].id" -o tsv - 管道传递ID到删除命令批量执行,建议先加
--what-if参数验证删除列表,确认无误后再去掉该参数执行实际删除:
验证命令:az resource list --query "[?name=='testvnet' || name=='testvm'].id" -o tsv | xargs az resource delete --what-if --ids
实际执行删除:az resource list --query "[?name=='testvnet' || name=='testvm'].id" -o tsv | xargs az resource delete --ids
- 切换到目标订阅和默认资源组(你已完成的前置操作可直接复用)
方案2:读取CSV文件批量删除
如果你已经把要删除的资源信息整理为CSV文件,可通过简单脚本批量读取执行。
提前准备CSV文件
CSV表头固定为name,resource_type,内容示例:
name,resource_type testvnet,Microsoft.Network/virtualNetworks testvm,Microsoft.Compute/virtualMachines teststorage,Microsoft.Storage/storageAccounts testnsg,Microsoft.Network/networkSecurityGroups
Bash环境(Linux/macOS/WSL)执行脚本
# 切换到目标订阅和资源组 az account set -s <subscription_ID> az configure --defaults group=<目标资源组名> # 逐行读取CSV跳过表头执行删除,验证阶段可先注释实际删除命令,仅打印待删资源 tail -n +2 resources_to_delete.csv | while IFS=, read -r name resource_type do echo "待删除资源: $name ($resource_type)" # 验证完成后,注释上一行echo,去掉下一行的注释执行实际删除 # az resource delete -n "$name" --resource-type "$resource_type" done
PowerShell环境(Windows)执行脚本
# 切换到目标订阅和资源组 az account set -s <subscription_ID> az configure --defaults group=<目标资源组名> # 导入CSV批量执行 $resources = Import-Csv -Path "resources_to_delete.csv" foreach ($res in $resources) { Write-Host "待删除资源: $($res.name) ($($res.resource_type))" # 验证阶段保留--what-if参数,确认后去掉该参数执行实际删除 az resource delete -n $res.name --resource-type $res.resource_type --what-if }
注意事项
- 批量删除前务必先通过
--what-if参数或者打印待删列表的方式做校验,避免误删业务资源 - 如果资源存在依赖关系(比如VM关联磁盘、网卡),需要先删除上层资源再删除下层依赖资源,否则会删除失败,可调整CSV中资源的顺序适配依赖关系
- 单次批量删除的资源数量建议控制在50个以内,避免API调用限流
内容的提问来源于stack exchange,提问作者Gokul
相关产品推荐
相关产品推荐

