如何以编程方式删除资源组中除特定资源之外的所有内容?
How do you delete everything in a resource group except for specific resources programmatically?
假设我有一个资源组 MyAppRG。它有一个存储帐户、一个 SQL 服务器、一个密钥库和一个虚拟机。如何以编程方式删除资源组中除存储帐户和 keyvault 之外的所有内容?
我知道有一种方法可以通过部署空臂模板部署来删除资源组中的所有内容。我已尝试在资源上使用 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
但这不起作用,因为请求无效。
您可以使用标签“过滤掉”您希望保留的资源,但这种方法的缺点是您需要知道删除资源的顺序。例如,您需要先删除 Web 应用程序,然后才能删除应用程序托管计划。在下面的示例中,我有一个名为 'DELETE' 的标签,其值为 'TRUE'.
get-AZresource -tagname delete -tagvalue true | Remove-AzResource
老实说,一个更好的方法是将所有您不想删除的项目保存在一个单独的资源组中,并将 RG 视为具有生命周期边界。这样,当您准备好删除不需要的项目时,您可以通过一个命令将整个 RG 删除。
另外,如果您担心有人不小心删除某些资源,您应该使用resource locks在删除之前添加另一个检查点。
假设我有一个资源组 MyAppRG。它有一个存储帐户、一个 SQL 服务器、一个密钥库和一个虚拟机。如何以编程方式删除资源组中除存储帐户和 keyvault 之外的所有内容?
我知道有一种方法可以通过部署空臂模板部署来删除资源组中的所有内容。我已尝试在资源上使用 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
但这不起作用,因为请求无效。
您可以使用标签“过滤掉”您希望保留的资源,但这种方法的缺点是您需要知道删除资源的顺序。例如,您需要先删除 Web 应用程序,然后才能删除应用程序托管计划。在下面的示例中,我有一个名为 'DELETE' 的标签,其值为 'TRUE'.
get-AZresource -tagname delete -tagvalue true | Remove-AzResource
老实说,一个更好的方法是将所有您不想删除的项目保存在一个单独的资源组中,并将 RG 视为具有生命周期边界。这样,当您准备好删除不需要的项目时,您可以通过一个命令将整个 RG 删除。
另外,如果您担心有人不小心删除某些资源,您应该使用resource locks在删除之前添加另一个检查点。