internal/functions/Set-AzOpsRemoveOrder.ps1
function Set-AzOpsRemoveOrder { <# .SYNOPSIS Sorts a custom object list based on a specified priority order using a user-defined index. .DESCRIPTION Used to sort deletion priority, aka locks are removed prior to resource deletion attempts. .PARAMETER DeletionList Custom object list to be sorted based on the defined priority. .PARAMETER Index Script block that determines the index used for sorting the deletion list. .PARAMETER Priority Optional array of strings representing the priority order. Defaults to a predefined order if not provided. .EXAMPLE > $sortedList = Set-AzOpsRemoveOrder -DeletionList $myCustomObjectList -Index { $_.SomeProperty } #> [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] $DeletionList, [Parameter(Mandatory = $true)] [scriptblock] $Index, [string[]] $Priority = @( "locks", "policyExemptions", "policyAssignments", "policySetDefinitions", "policyDefinitions", "resourceGroups", "managementGroups" ) ) process { #Sort 'DeletionList' based on 'Priority' $deletionListSorted = $DeletionList | Sort-Object -Property { $resolvedIndex = & $Index $priorityIndex = $Priority.IndexOf($resolvedIndex) if ($priorityIndex -eq -1) { # Set a default priority for items not found in Priority return [int]::MaxValue } else { return $priorityIndex } } # Return processed list return $deletionListSorted } } |