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) { Invoke-WPFUIThread -ScriptBlock { Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" } } else { Invoke-WPFUIThread -ScriptBlock { 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." $null = $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." $null = $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 }