首页 > 解决方案 > 您如何以编程方式删除资源组中除特定资源之外的所有内容?

问题描述

假设我有一个资源组 MyAppRG。它有一个存储帐户、一个 SQL 服务器、一个密钥库和一个 VM。如何以编程方式删除资源组中除存储帐户和密钥库之外的所有内容?

我知道有一种方法可以通过部署一个空的 arm 模板部署来删除资源组中的所有内容。我尝试在资源上使用 Get-AzResource 并将其添加到 ARM 模板的资源参数中,但它不起作用。像这样的东西:

$storageAccounts = Get-AzStorageAccount -ResourceGroupName "MyAppRG" | Get-AzResource
$emptyArmTemplate = @{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  contentVersion: "1.0.0.0",
  "resources": @(storageAccounts),
}

New-AzResourceGroupDeployment -Name "test" -ResourceGroupName "MyAppRG" -TemplateObject $emptyArmTemplate -Force

但这不起作用,因为请求无效。

标签: azureazure-resource-managerazure-resource-groupazure-stack

解决方案


您可以使用标签“过滤掉”您希望保留的资源,但这种方法的缺点是您需要知道删除资源的顺序。例如,您需要先删除 Web 应用程序,然后再删除应用程序托管计划。在下面的示例中,我有一个名为“DELETE”的标签,其值为“TRUE”。

get-AZresource -tagname delete -tagvalue true | Remove-AzResource

老实说,更好的方法是将您不想删除的所有项目保留在单独的资源组中,并认为 RG 具有生命周期边界。这样,当您准备好删除不需要的项目时,您可以在一个命令中吹走整个 RG。

此外,如果您担心有人意外删除某些资源,您应该使用资源锁在删除之前添加另一个检查点。


推荐阅读