function Get-WinUtilSelectedPackages { param( [Parameter(Mandatory = $true)] [object] $PackageList, [Parameter(Mandatory = $true)] [string] $Preference ) # A single package has no meaningful percentage to show if ($PackageList.count -eq 1) { Step-WinUtilJob -State "Indeterminate" } $packagesWinget = [System.Collections.ArrayList]::new() $packagesChoco = [System.Collections.ArrayList]::new() $packages = @{ Winget = $packagesWinget Choco = $packagesChoco } function Add-PackageId { param( [System.Collections.ArrayList]$Target, $PackageId ) if ([string]::IsNullOrWhiteSpace([string]$PackageId) -or $PackageId -eq "na") { return } if (-not $Target.Contains($PackageId)) { $null = $Target.Add($PackageId) } } foreach ($package in $PackageList) { switch ($Preference) { "Choco" { if ([string]::IsNullOrWhiteSpace([string]$package.choco) -or $package.choco -eq "na") { Add-PackageId -Target $packagesWinget -PackageId $package.winget } else { Add-PackageId -Target $packagesChoco -PackageId $package.choco } } "Winget" { Add-PackageId -Target $packagesWinget -PackageId $package.winget } } } return $packages }