Private/Compare-TextVersionNumber.ps1

# Compare-TextVersionNumber: version comparison similar to [System.Version]'s CompareTo method
# Returns: 1 = CompareTo is newer, 0 = Equal, -1 = Version is newer
function Compare-TextVersionNumber {
    param(
        [string]$Version,
        [string]$CompareTo
    )
    $res= 0
    $null= $Version -match '^(?<version>[\d\.]+)(\-)?([a-zA-Z]*(?<preview>[\d]*))?$'
    $VersionVer= [System.Version]($matches.Version)
    If( $matches.Preview) {
        # Suffix .0 to satisfy [System.Version] as '#' alone won't initialize
        $VersionPreviewVer= [System.Version]('{0}.0' -f $matches.Preview)
    }
    Else {
        $VersionPreviewVer= [System.Version]'99999.99999'
    }
    $null= $CompareTo -match '^(?<version>[\d\.]+)(\-)?([a-zA-Z]*(?<preview>[\d]*))?$'
    $CompareToVer= [System.Version]($matches.Version)
    If( $matches.Preview) {
        $CompareToPreviewVer= [System.Version]('{0}.0' -f $matches.Preview)
    }
    Else {
        $CompareToPreviewVer= [System.Version]'99999.99999'
    }

    If( $VersionVer -gt $CompareToVer) {
        $res= -1
    }
    Else {
        If( $VersionVer -lt $CompareToVer) {
            $res= 1
        }
        Else {
            # Equal base version — check preview tag
            If( $VersionPreviewVer -gt $CompareToPreviewVer) {
                $res= -1
            }
            Else {
                If( $VersionPreviewVer -lt $CompareToPreviewVer) {
                    $res= 1
                }
                Else {
                    # Truly equal
                    $res= 0
                }
            }
        }
    }
    $res
}