private/Find-ChocoPackage.ps1

function Find-ChocoPackage {
    param (
        [Parameter(Mandatory=$true)]
        [string]
        $Name,

        [Parameter()]
        [string]
        $RequiredVersion,

        [Parameter()]
        [string]
        $MinimumVersion,

        [Parameter()]
        [string]
        $MaximumVersion
    )

    Write-Debug ($LocalizedData.ProviderDebugMessage -f ('Find-ChocoPackage'))

    $options = $request.Options

    [array]$RegisteredPackageSources = Foil\Get-ChocoSource

    $selectedSource = $(
        if ($options -And $options.ContainsKey('Source')) {
            # Finding the matched package sources from the registered ones
            if ($RegisteredPackageSources.Name -eq $options['Source']) {
                # Found the matched registered source
                $options['Source']
            } else {
                ThrowError -ExceptionName 'System.ArgumentException' `
                -ExceptionMessage ($LocalizedData.PackageSourceNotFound -f ($options['Source'])) `
                -ErrorId 'PackageSourceNotFound' `
                -ErrorCategory InvalidArgument `
                -ExceptionObject $options['Source']
            }
        } else {
            # User did not specify a source. Now what?
            if ($RegisteredPackageSources.Count -eq 1) {
                # If no source name is specified and only one source is available, use that source
                $RegisteredPackageSources[0].Name
            } elseif ($RegisteredPackageSources.Name -eq $script:PackageSource) {
                # If multiple sources are avaiable but none specified, default to using Chocolatey.org - if present
                $script:PackageSource
            } else {
                # If Chocoately.org is not present and no source specified, we can't guess what the user wants - throw an exception
                ThrowError -ExceptionName 'System.ArgumentException' `
                -ExceptionMessage $LocalizedData.UnspecifiedSource `
                -ErrorId 'UnspecifiedSource' `
                -ErrorCategory InvalidArgument
            }
        }
    )

    Write-Verbose "Source selected: $selectedSource"

    $chocoParams = @{
        Name = $Name
        Source = $selectedSource
    }

    if ($requiredVersion) {
        $chocoParams.Add('Version',$requiredVersion)
    }

    if ($minimumVersion -Or $maximumVersion -Or $options.ContainsKey($script:AllVersions)) {
        # Choco does not support searching by min or max version, so if a user is picky we'll need to pull back all versions and filter ourselves
        $chocoParams.Add('AllVersions',$true)
    }

    if (-Not [WildcardPattern]::ContainsWildcardCharacters($Name)) {
        # Limit NuGet result set to just the specific package name unless it contains a wildcard
        $chocoParams.Add('Exact',$true)
    }

    # Convert the PSCustomObject output from Foil into PackageManagement SWIDs, then filter results by any version requirements
    Foil\Find-ChocoPackage @chocoParams | ConvertTo-SoftwareIdentity -Source $selectedSource |
        Where-Object {Test-PackageVersion -Package $_ -RequiredVersion $RequiredVersion -MinimumVersion $MinimumVersion -MaximumVersion $MaximumVersion}
}