UpgradeTools/Get-ObjectSummaryByVersionList.ps1

function Get-ObjectSummaryByVersionList {
    Param(
        [Parameter(Mandatory=$true)]
        [string]$SourcePath
    )

    $VersionLists = @{}

    $Files = @()
    gci $SourcePath | % {$Files += $_.FullName}

    Get-NAVApplicationObjectProperty -Source $Files | % {
        $Versions = $_.VersionList.Split(',')
        foreach ($Version in $Versions) {
            if ($Version -ne '') {
                $VersionCode = Get-AlphaPartOfVersionList -VersionList $Version
                [Version]$VersionNo = $null

                if ($Version.Length -gt $VersionCode.Length) {
                    if (![Version]::TryParse($Version.Substring($VersionCode.Length),[ref]$VersionNo)) {
                        if (![Version]::TryParse($Version.Substring($VersionCode.Length) + '.0',[ref]$VersionNo)) {
                            $VersionNo = [Version]::Parse('1.0')
                        }
                    }            
                }
                else {
                    $VersionNo = [Version]::Parse('1.0')
                }

                if (!$VersionLists.ContainsKey($VersionCode)) {
                    $VersionLists.Add($VersionCode,$VersionNo)
                }
                else {
                    [Version]$ExistingVersion = $VersionLists.Item($VersionCode)
                    if ($ExistingVersion -eq $null) {
                        $VersionLists.Item($VersionCode) = $VersionNo
                    }
                    elseif ($ExistingVersion.CompareTo($VersionNo) -eq -1) {
                        $VersionLists.Item($VersionCode) = $VersionNo
                    }
                }
            }
        }
    }

    $VersionLists
}

Export-ModuleMember -Function Get-ObjectSummaryByVersionList