use*_*142 5 azure azure-powershell azure-cli
目标是删除资源组中的所有资源,而不使用 azure CLI 删除它。
通过阅读文档,我可以这样做:
az resource delete -g MyResourceGroup -n MyVm
Run Code Online (Sandbox Code Playgroud)
因此我认为我可以执行以下操作
az resource list --resource-group MyResourceGroup | az resource delete
Run Code Online (Sandbox Code Playgroud)
Azure Powershell 中的类似命令的工作方式与上面类似。我对 CLI 很陌生,这个方法可行吗?删除资源组中所有资源的有效方法是什么(如果我们有多种类型的资源)
如果可以在 powershell 中运行 Azure CLI,则可以将ConvertFrom-JsonJSON 结果转换为来自 的对象列表,然后使用循环在每个对象 id 上az resource list运行。az resource deleteforeach
$resources = az resource list --resource-group myResourceGroup | ConvertFrom-Json
foreach ($resource in $resources) {
az resource delete --resource-group myResourceGroup --ids $resource.id --verbose
}
Run Code Online (Sandbox Code Playgroud)
我们还可以使用 完全在管道中运行它Foreach-Object,这与您想要做的很接近。
az resource list --resource-group myResourceGroup
| ConvertFrom-Json
| Foreach-Object {az resource delete --resource-group myResourceGroup --ids $_.id --verbose}
Run Code Online (Sandbox Code Playgroud)
如果您根本不想使用 powershell,我们可以使用 bash 自己使用grep和解析 JSON 输出awk。
#!/bin/bash
resources="$(az resource list --resource-group myResourceGroup | grep id | awk -F \" '{print $4}')"
for id in $resources; do
az resource delete --resource-group myResourceGroup --ids "$id" --verbose
done
Run Code Online (Sandbox Code Playgroud)
正如@Hong Ooi在评论中指出的那样,上述的主要问题是某些资源依赖于其他资源,因此删除顺序很重要。一个例子是,在删除虚拟机之前,您无法删除虚拟机磁盘。
为了解决这个问题,我们可以定义删除资源的资源类型的顺序,如下面的示例哈希表所示:
$resourceOrderRemovalOrder = [ordered]@{
"Microsoft.Compute/virtualMachines" = 0
"Microsoft.Compute/disks" = 1
"Microsoft.Network/networkInterfaces" = 2
"Microsoft.Network/publicIpAddresses" = 3
"Microsoft.Network/networkSecurityGroups" = 4
"Microsoft.Network/virtualNetworks" = 5
}
Run Code Online (Sandbox Code Playgroud)
然后按资源类型对资源进行排序并删除:
$resources = az resource list --resource-group myResourceGroup | ConvertFrom-Json
$orderedResources = $resources
| Sort-Object @{
Expression = {$resourceOrderRemovalOrder[$_.type]}
Descending = $False
}
$orderedResources | ForEach-Object {
az resource delete --resource-group myResourceGroup --ids $_.id --verbose
}
Run Code Online (Sandbox Code Playgroud)
或者如果您愿意的话,可以在一个管道中:
az resource list --resource-group myResourceGroup
| ConvertFrom-Json
| Sort-Object @{Expression = {$resourceOrderRemovalOrder[$_.type]}; Descending = $False}
| ForEach-Object {az resource delete --resource-group myResourceGroup --ids $_.id --verbose}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6158 次 |
| 最近记录: |