each orbversion all packages installed to that orb version -> latest per package id per orb version Checkpoint-EC2Instances -ProfileName temp-dev; Checkpoint-EC2Instances -ProfileName temp-qa; Checkpoint-EC2Instances -ProfileName temp-prod; $sb = { $version = Get-OrbVersion $packages = Get-LocallyInstalledChocoPackages -LimitOutput return @{ Version = $version; Packages = $packages; } } $devResults = Invoke-Command -ComputerName (Get-CachedInstances -ProfileName temp-dev -App -Mic -Web).Hostname -ScriptBlock $sb -ErrorAction Ignore $qaResults = Invoke-Command -ComputerName (Get-CachedInstances -ProfileName temp-qa -App -Mic -Web).Hostname -ScriptBlock $sb -ErrorAction Ignore $prodResults = Invoke-Command -ComputerName (Get-CachedInstances -ProfileName temp-prod -App -Mic -Web).Hostname -ScriptBlock $sb -ErrorAction Ignore $allResults = $devResults + $qaResults + $prodResults $finalHash = @{} foreach ($result in $allResults) { if (Test-StringIsNullOrWhitespace -Value $result.Version) { continue } $rawOrbVersion = [Version]$result.Version $orbVersion = ([Version]::new($rawOrbVersion.Major, $rawOrbVersion.Minor, $rawOrbVersion.Build)).toString() if ($null -eq $finalHash[$orbVersion]) { $finalHash[$orbVersion] = @{} } foreach ($package in $result.Packages) { $packageId = ($package -split '\|')[0] $packageVersion = (($package -split '\|')[1] -split '-')[0] if ($null -eq $finalHash[$orbVersion][$packageId]) { $finalHash[$orbVersion][$packageId] = $packageVersion } else { try { # skip -pre collisions for now $lastHashVersion = [Version]$finalHash[$orbVersion][$packageId] $currentHashVersion = [Version]$packageVersion if ($lastHashVersion -lt $currentHashVersion) { $finalHash[$orbVersion][$packageId] = $packageVersion } } catch { Write-Host "Could not parse [$($finalHash[$orbVersion][$packageId])] or [$packageVersion] as a version for [$packageId]" } } } }