public/Get-CurrentVersionFromMEMCM.ps1

function Get-CurrentVersionFromMEMCM {
    <#
    .SYNOPSIS
        Short description
    .DESCRIPTION
        Long description
    .EXAMPLE
        PS C:\> <example usage>
        Explanation of what the example does
    .INPUTS
        Inputs (if any)
    .OUTPUTS
        Output (if any)
    .NOTES
        General notes
    #>

    [CmdletBinding()]
    param(
        [String]$AppName
    )

    begin {
        Write-Verbose -Message "Starting $($myinvocation.mycommand)"

        $SaveVerbosePreference = $global:VerbosePreference
        $global:VerbosePreference = 'SilentlyContinue'
        $null = Import-Module -Name $GlobalConfig.MEMCMModulePath.LocalPath -Verbose:$false
        $global:VerbosePreference = $SaveVerbosePreference
    } process {
        Push-Location
        Write-Verbose -Message "Processing $($SiteTarget.Site) Site..."
        $SiteCode = $SiteTarget.SiteCode

        try {
            if (-not (Test-Path -Path $SiteCode)) {
                $ConfigMgrDrive = New-PSDrive -Name $SiteCode -PSProvider CMSite -Root $SiteTarget.Site -Credential $Credential
            }
        }
        catch {
            Write-Error $Error[0]
            Write-Warning -Message "Error: $($_.Exception.Message)"
        }

        Set-Location -Path "$SiteCode`:\"

        # Use 0.0.0 as default return version so if it's not found any version is newer.

        $ReturnVersion = "0.0.0"
        $ReturnAppName = ""

        $FindVariablesRegex = "{.*?}"

        $AppNameWithWildcards = $AppName -replace $FindVariablesRegex, "*"

        $AllApps = Get-CMApplication -Name $AppNameWithWildcards -Fast -ErrorAction SilentlyContinue | Select-Object -Property LocalizedDisplayName, CI_ID, SoftwareVersion

        if ($AllApps) {
            foreach ($App in $AllApps) {
                Write-Verbose -Message "Checking $($App.LocalizedDisplayName) :: ($($App.SoftwareVersion))"
                if (Compare-Version -ReferenceVersion $ReturnVersion -DifferenceVersion $App.SoftwareVersion -ErrorAction SilentlyContinue) {
                    Write-Verbose -Message "$($App.SoftwareVersion) is greater than $ReturnVersion for $($App.LocalizedDisplayName)"

                    $ReturnVersion = $App.SoftwareVersion
                    $ReturnAppName = $App.LocalizedDisplayName
                }
                else {
                    Write-Verbose -Message "$($App.SoftwareVersion) is less than or equal to $ReturnVersion for $($App.LocalizedDisplayName)"
                }
            }
        }

        Pop-Location
        $ConfigMgrDrive | Remove-PSDrive

        return @{
            AppName = $ReturnAppName
            Version = $ReturnVersion
        }
    } end {
        Write-Verbose -Message "Finished $($myinvocation.mycommand)"
    }
}