Skip to content

Commit

Permalink
improve concurrency handling
Browse files Browse the repository at this point in the history
  • Loading branch information
Jelle Broekhuijsen committed Aug 11, 2023
1 parent 9ea05bc commit 9d40d07
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions Remove-AzManagementGroups.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -44,26 +44,28 @@ $assignments | ForEach-Object -Parallel {

#Remove the entire hierachy of management groups
Write-Output "Attempting to remove $($managementGroups.Count) management groups"
$lingeringManagementGroupCount = 0
$lingeringManagementGroups = [System.Collections.Concurrent.ConcurrentBag[PSObject]]::new()

do{
$managementGroups | ForEach-Object -Parallel {
$localLingeringManagementGroups = $using:lingeringManagementGroupCount
$managementGroup = Get-AzManagementGroup -GroupName $_.Name -ErrorAction SilentlyContinue
if($null -ne $managementGroup){
Write-Output "Attempting to remove management group: $($managementGroup.Name)"
Remove-AzManagementGroup -GroupName $managementGroup.Name -ErrorAction Continue
}
else{
Write-Output "Deleted management group '$($_.Name)' added to lingering management group count"
$lingeringManagementGroupCount++
$localLingeringManagementGroups.Add($_)
}
}
$managementGroups = Get-AzManagementGroup | Where-Object { $_.Name -ne $TenantId }
if($managementGroups.Count -gt 0 -and $lingeringManagementGroupCount -lt $managementGroups.Count){
Write-Output "Found $($managementGroups.Count - $lingeringManagementGroupCount) remaining management groups to remove"
if($managementGroups.Count -gt 0 -and $lingeringManagementGroups.Count -lt $managementGroups.Count){
Write-Output "Found $($managementGroups.Count - $lingeringManagementGroups.Count) remaining management groups to remove"
Write-Output "Waiting 30 seconds before retrying"
$lingeringManagementGroupCount = 0
$localLingeringManagementGroups.Clear()
Start-Sleep -Seconds 30
}
}
while($managementGroups.Count -gt 0 -and $lingeringManagementGroupCount -lt $managementGroups.Count)
while($managementGroups.Count -gt 0 -and $lingeringManagementGroups.Count -lt $managementGroups.Count)
Write-Output "Successfully removed all management groups"

0 comments on commit 9d40d07

Please sign in to comment.