如何以编程方式删除资源组中除特定资源之外的所有内容?

时间:2021-05-25 18:02:51

标签: azure azure-resource-manager azure-resource-group azure-stack

假设我有一个资源组 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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

另外,如果你担心有人不小心删除了某些资源,你应该使用resource locks在删除前添加另一个检查点。

相关问题