private/Get-VsVersionHelper.ps1

function Get-VsVersionHelper {
    <#
    .SYNOPSIS
        Helper to get the Visual Studio version and toolset.
    .PARAMETER VsConfig
        Visual Studio Configuration
    .PARAMETER VsVersion
        Visual Studio Version
    #>

    [OutputType()]
    param (
        [Parameter(Mandatory = $true, Position=0, HelpMessage='Visual Studio Version')]
        [ValidateNotNull()]
        [ValidateLength(1, [int]::MaxValue)]
        [string] $VsVersion,
        [Parameter(Mandatory = $true, Position=1, HelpMessage='Visual Studio Configuration')]
        [PSCustomObject] $VsConfig
    )
    begin {
    }
    process {
        if($null -eq (Get-Command vswhere -ErrorAction SilentlyContinue)) {
            throw "vswhere is not available"
        }
        $MSVCDirectory = vswhere -latest -products * -find "VC\Tools\MSVC"
        $selectedToolset = $null
        $minor = $null
        foreach ($toolset in (Get-ChildItem $MSVCDirectory)) {
            $toolsetMajorVersion, $toolsetMinorVersion = $toolset.Name.split(".")[0,1]
            $requiredVs = $VsConfig.vs.$VsVersion
            $majorVersionCheck = [int]$requiredVs.major -eq [int]$toolsetMajorVersion
            $minorLowerBoundCheck = [int]$toolsetMinorVersion -ge [int]$requiredVs.minorMin
            $minorUpperBoundCheck = ($null -eq $requiredVs.minorMax) -or ([int]$toolsetMinorVersion -le [int]$requiredVs.minorMax)
            if ($majorVersionCheck -and $minorLowerBoundCheck -and $minorUpperBoundCheck) {
                if($null -eq $minor -or [int]$toolsetMinorVersion -gt [int]$minor) {
                    $selectedToolset = $toolset.Name.Trim()
                    $minor = $toolsetMinorVersion
                }
            }
        }

        if (-not $selectedToolset) {
            throw "toolset not available"
        }

        return $selectedToolset
    }
    end {
    }
}