function Get-WinUtilSelectedPackages { <# .SYNOPSIS Sorts given packages based on installer preference and availability. .OUTPUTS Hashtable. Key = Package Manager, Value = ArrayList of packages to install #> param ( [Parameter(Mandatory=$true)] $PackageList, [Parameter(Mandatory=$true)] [PackageManagers]$Preference ) if ($PackageList.count -eq 1) { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) } else { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) } $packages = [System.Collections.Hashtable]::new() $packagesWinget = [System.Collections.ArrayList]::new() $packagesChoco = [System.Collections.ArrayList]::new() $packages[[PackageManagers]::Winget] = $packagesWinget $packages[[PackageManagers]::Choco] = $packagesChoco Write-Debug "Checking packages using Preference '$($Preference)'" foreach ($package in $PackageList) { switch ($Preference) { "Choco" { if ($package.choco -eq "na") { Write-Debug "$($package.content) has no Choco value." $packagesWinget.add($package.winget) Write-Host "Queueing $($package.winget) for Winget" } else { $null = $packagesChoco.add($package.choco) Write-Host "Queueing $($package.choco) for Chocolatey" } break } "Winget" { if ($package.winget -eq "na") { Write-Debug "$($package.content) has no Winget value." $packagesChoco.add($package.choco) Write-Host "Queueing $($package.choco) for Chocolatey" } else { $null = $packagesWinget.add($($package.winget)) Write-Host "Queueing $($package.winget) for Winget" } break } } } return $packages }