Private/Get-PackagePriority.ps1
function Get-PackagePriority { [CmdletBinding()] param ( [Parameter()] [array] $Configurations ) #Evaluate Ring Status $Ring = Get-cChocoExRing [int]$SystemRingValue = Get-RingValue -Name $Ring #Filter Package Sets with the same name and select an appropriate package based on SystemRingValue $Matches = $Configurations.Name | Group-Object | Where-Object {$_.Count -gt 1} $MultiPackageSets = $Matches | Where-Object { $Matches.Name -contains $_.Name } $MultiPackageSets | ForEach-Object { $PackageSet = $_ $ConfigurationsFiltered = $Configurations | Where-Object {$_.Name -eq $PackageSet.Name} $ConfigurationsFiltered | ForEach-Object { [int]$_.RingValue = (Get-RingValue -Name $_.Ring) } $EligibleRingValue = $ConfigurationsFiltered.RingValue | Sort-Object | Where-Object {$SystemRingValue -ge $_} | Select-Object -Last 1 $RingPackage = $ConfigurationsFiltered | Where-Object {$EligibleRingValue -eq $_.RingValue} #Fix for casting issue when only a single package is defined multiple times if ($null -eq ($Configurations | Where-Object {$_.Name -ne $RingPackage.Name})) { [array]$Configurations = @() } else { $Configurations = $Configurations | Where-Object {$_.Name -ne $RingPackage.Name} } $Configurations += $RingPackage } #Remove Temp RingValue Property $Configurations | ForEach-Object {$_.Remove("RingValue")} #Sort by Priority Value $Configurations = $Configurations.GetEnumerator() | Sort-Object {$_.Priority} return $Configurations } |