function Get-ChocolateySources { <# .SYNOPSIS Returns a list of locally configured chocolatey feed objects. #> [CmdletBinding()] Param( [Parameter(Mandatory = $false)] [string]$hostname = "localhost", [Parameter(Mandatory = $false)] [Alias("IncludeDisabled")] [switch]$includeDisabledSources ) $logLead = (Get-logLeadName) # Grab chocolatey feeds configured on the local machine or server. $sources = $null; if(($hostname -eq "localhost") -or ($hostname -eq ".")) { $sources = (choco source list -r); } else { $sources = Invoke-Command -ComputerName $hostname -ScriptBlock { return (choco source list -r) }; } $alkamiFeedMatch = "https://packagerepo.orb.alkamitech.com/nuget/choco.*"; $sdkFeedMatch = "https://feeds.alkamitech.com/nuget/*"; $resultSources = @(); foreach ($sourceToCheck in $sources) { $splitSource = $sourceToCheck.Split("|") if (!($includeDisabledSources) -and ($splitSource[2] -eq "True")) { Write-Host "$logLead : Skipping $sourceToCheck" continue; } $isDefaultFeed = $splitSource[0] -eq "chocolatey"; $properties = @{ Name = $splitSource[0]; Source = $splitSource[1]; Priority = $splitSource[5]; Disabled = if ($splitSource[2] -like "true") { $true; } else { $false; } IsDefault = $isDefaultFeed; IsSDK = (!$isDefaultFeed) -and ($splitSource[1] -like $sdkFeedMatch); }; $source = New-Object -TypeName PSObject -Prop $properties; $resultSources += $source; } # Re-arrange the choco sources to prioritize the Alkami choco.* feeds to the top, and SDK feeds second. It speeds up searching! $resultSources = ($resultSources | Sort-Object -Property @{Expression={ [int]($_.Source -like $alkamiFeedMatch) * 2 + [int]($_.Source -like $sdkFeedMatch)}} -Descending); return $resultSources; }