Если вы хотите удалить группы уровень за уровнем (от самого нижнего до верхнего) на основе логики выше c. Вы можете использовать приведенный ниже фрагмент.
function remove-recursively($name)
{
#gets the parent item
$parent = Get-AzManagementGroup -GroupName $name -Expand -Recurse
#if the children is null
if($parent.Children -eq $null)
{
$temp = $parent.Name
Write-Host "Removing management Group $temp" -ForegroundColor White
#removes the bottom most in the iteration.
Remove-AzManagementGroup -InputObject $parent
}
else
{
foreach($children in $parent.Children)
{
#recurse if it is not null
remove-recursively($children.Name)
}
}
}
Вы можете выполнять итерацию несколько раз - пока в группе root не останется дочерних элементов.
while((Get-AzManagementGroup -GroupName ("CEO") -Expand -Recurse).Children -ne $null)
{
remove-recursively -name CEO
}
В качестве альтернативы Если ваша цель - удалить всю группу на верхнем уровне. Вы можете написать функцию, которая вызывается рекурсивно до тех пор, пока не будет удален root.
Логика функции c выглядит следующим образом:
- Получить группу
- Найдите, есть ли дети
- Если да, следуйте шагу 1 для каждого ребенка в группе.
- Удалите группу.
Предоставляя вам фрагмент функции, основанной на приведенном выше логе c.
function remove-recursively($name)
{
#Enters the parent Level
Write-Host "Entering the scope with $name" -ForegroundColor Green
$parent = Get-AzManagementGroup -GroupName $name -Expand -Recurse
#Checks if there is any parent level.
if($parent.Children -ne $null)
{
Write-Host "Found the following Children :" -ForegroundColor White
Write-host ($parent.Children | select Name).Name -ForegroundColor Yellow
foreach($children in $parent.Children)
{
#tries to recurs to each child item
remove-recursively($children.Name)
}
}
#this below executes if all the child items are deleted or if doesn't have any child item
Write-Host "Removing the scope $name" -ForegroundColor Cyan
#Comment the below line if you just want to understand the flow
Remove-AzManagementGroup -InputObject $parent
}
Вы можете вызвать функцию, как показано ниже:
remove-recursively -name <RootGroupName>
Фрагмент Вывод:
Logi c 1:
Logic 2 :
введите описание изображения здесь
Рекомендуем протестировать скрипты в среде Dev.