Public/Packages/Search-ChocoPackage.ps1

Function Search-ChocoPackage {
    <#
    .SYNOPSIS
        Search for a chocolatey package.
    .DESCRIPTION
        Search for a chocolatey package.
    .PARAMETER Name
        The name of the package to search for.
    .PARAMETER Source
        Search on a specific source.
    .PARAMETER Exact
        Search for an exact match.

    .EXAMPLE
        Search-ChocoPackage -Name "vlc"
        Name Version
        ---- -------
        vlc 3.0.18
        vlc.install 3.0.18
        vlc.portable 3.0.18
        vlc-nightly 4.0.0.20230713

    .EXAMPLE
        Search-ChocoPackage -Name "vlc" -Source "chocolatey"
        Name Version
        ---- -------
        vlc 3.0.18
        vlc.install 3.0.18
        vlc.portable 3.0.18
        vlc-nightly 4.0.0.20230713
    .EXAMPLE
        Search-ChocoPackage -Name "vlc" -Source "chocolatey" -Exact
        Name Version
        ---- -------
        vlc 3.0.18
    .OUTPUTS
        PSCustomObject

    #>

    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory = $true, Position = 0)]
        [String] $Name,

        [String] $Source = "chocolatey",
        [Switch] $Exact
    )

    if (Test-ChocoInstalled) {
        $Header = "Name", "Version"
        Try {

            if ($Exact) {
                $ChocoPackages = ConvertFrom-Csv (choco search $Name -s $Source -r --exact --nocolor) -Delimiter '|' -Header $Header
            }
            else {
                $ChocoPackages = ConvertFrom-Csv (choco search $Name -s $Source -r --nocolor) -Delimiter '|' -Header $Header
            }
            Return $ChocoPackages
        }
        Catch [System.Management.Automation.ParameterBindingException] {
            Write-Verbose "No package found with name '$Name' on source '$Source'."
            Return $null
        }
    }

}