1

我試圖找到所有沒有資源的Azure RM資源組,並使用PowerShell刪除這些資源組。使用Portal進行刪除非常耗時。使用PowerShell我可以通過使用下面的代碼來完成。有沒有更好的方式在PowerShell中實現這一點?刪除沒有資源的Azure資源組

$allResourceGroups = Get-AzureRmResourceGroup 

$resourceGroupsWithResources = Get-AzureRMResource | Group-Object ResourceGroupName 

$allResourceGroups | % { 
    $r1 = $_ 
    [bool]$hasResource = $false 
    $resourceGroupsWithResources | % { 
     if($r1.ResourceGroupName -eq $_.Name){ 
     $hasResource = $true 
     } 
    } 
    if($hasResource -eq $false){ 
     Remove-AzureRmResourceGroup -Name $r1.ResourceGroupName -Force 
    } 
} 

回答

1

你可以嘗試

$allResourceGroups = Get-AzureRmResourceGroup | ForEach-Object { $_.ResourceGroupName } 

$resourceGroupsWithResources = Get-AzureRMResource | Group-Object ResourceGroupName | ForEach-Object { $_.Name } 

$emptyResourceGroups = $allResourceGroups | Where-Object { $_ -NotIn $resourceGroupsWithResources } 

$emptyResourceGroups | ForEach-Object { Remove-AzureRmResourceGroup -Name $_ -Force } 

在這裏,他們被打包成可調用的函數

Function Get-AzureRmResourceGroupsWithNoResources { 
    process { 
     $allResourceGroups = Get-AzureRmResourceGroup | ForEach-Object { $_.ResourceGroupName } 

     $resourceGroupsWithResources = Get-AzureRMResource | Group-Object ResourceGroupName | ForEach-Object { $_.Name } 

     $emptyResourceGroups = $allResourceGroups | Where-Object { $_ -NotIn $resourceGroupsWithResources } 

     return $emptyResourceGroups 
    } 
} 

Function Remove-AzureRmResourceGroupsWithNoResources { 
    process { 
     Get-AzureRmResourceGroupsWithNoResources | ForEach-Object { Remove-AzureRmResourceGroup -Name $_ -Force } 
    } 
}