You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程方式删除Azure资源组中除指定资源外的所有内容

实现方案

原有代码报错原因

  • ARM模板的resources字段要求每个资源项必须包含type、name、apiVersion三个必填属性,直接传入Get-AzResource返回的完整资源对象不符合格式要求,所以触发请求无效报错
  • 原有代码仅将存储账户加入保留列表,遗漏了需要保留的Key Vault资源
  • 未指定部署模式为Complete,默认的增量部署模式不会删除模板中未定义的资源,即使格式正确也无法达到清理效果

方案1:基于ARM完整模式部署实现(匹配你的原有思路)

正确的PowerShell代码如下:

# 定义资源组名称
$rgName = "MyAppRG"

# 获取需要保留的存储账户和Key Vault资源
$keepResources = @(
    Get-AzStorageAccount -ResourceGroupName $rgName | Get-AzResource
    Get-AzKeyVault -ResourceGroupName $rgName | Get-AzResource
)

# 构造符合ARM规范的资源定义数组
$armResources = $keepResources | ForEach-Object {
    @{
        type = $_.ResourceType
        name = $_.Name
        apiVersion = $_.ApiVersion
    }
}

# 构造ARM模板
$emptyArmTemplate = @{
  "`$schema" = "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#"
  contentVersion = "1.0.0.0"
  resources = $armResources
}

# 执行完整模式部署,仅保留模板中定义的资源
New-AzResourceGroupDeployment -Name "cleanup-deployment" `
  -ResourceGroupName $rgName `
  -TemplateObject $emptyArmTemplate `
  -Mode Complete `
  -Force

方案2:直接筛选删除非目标资源(更简单易用)

如果你不需要用ARM模板的方式,可以直接过滤资源组内的资源,排除需要保留的类型后直接删除,逻辑更直观:

$rgName = "MyAppRG"
# 筛选排除存储账户和Key Vault之外的所有资源
$resourcesToDelete = Get-AzResource -ResourceGroupName $rgName | Where-Object {
    $_.ResourceType -ne "Microsoft.Storage/storageAccounts" -and
    $_.ResourceType -ne "Microsoft.KeyVault/vaults"
}

# 批量删除资源,可先加-WhatIf参数预览要删除的资源
$resourcesToDelete | Remove-AzResource -Force

注意事项

  • 执行删除操作前建议先添加-WhatIf参数预览操作结果,确认删除列表符合预期避免误删
  • 如果资源配置了删除锁,需要先移除删除锁后才能完成删除
  • 若Key Vault开启了软删除特性,删除后资源会保留在软删除列表中,需要额外执行清除操作才能彻底释放资源名称

内容的提问来源于stack exchange,提问作者Hydromast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 19:36:05