aboutsummaryrefslogtreecommitdiff
path: root/scripts/findVisualStudioInstallationInstances.ps1
blob: 566560cdb987c62b3000ad1d45d9284988d84ae6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
[CmdletBinding()]
param(

)

$scriptsDir = split-path -parent $MyInvocation.MyCommand.Definition
$vswhereExe = & $scriptsDir\fetchDependency.ps1 "vswhere"

$output = & $vswhereExe -prerelease -legacy -products * -format xml
[xml]$asXml = $output

$results = New-Object System.Collections.ArrayList
foreach ($instance in $asXml.instances.instance)
{
    $installationPath = $instance.InstallationPath -replace "\\$" # Remove potential trailing backslash
    $installationVersion = $instance.InstallationVersion
    $isPrerelease = $instance.IsPrerelease
    if ($isPrerelease -eq 0)
    {
        $releaseType = "PreferenceWeight3::StableRelease"
    }
    elseif ($isPrerelease -eq 1)
    {
        $releaseType = "PreferenceWeight2::PreRelease"
    }
    else
    {
        $releaseType = "PreferenceWeight1::Legacy"
    }

    # Placed like that for easy sorting according to preference
    $results.Add("${releaseType}::${installationVersion}::${installationPath}::<eol>") > $null
}

# If nothing is found, attempt to find VS2015 Build Tools (not detected by vswhere.exe)
if ($results.Count -eq 0)
{
    $programFiles = & $scriptsDir\getProgramFiles32bit.ps1
    $installationPath = "$programFiles\Microsoft Visual Studio 14.0"
    $clExe = "$installationPath\VC\bin\cl.exe"
    $vcvarsallbat = "$installationPath\VC\vcvarsall.bat"

    if ((Test-Path $clExe) -And (Test-Path $vcvarsallbat))
    {
        return "PreferenceWeight1::Legacy::14.0::$installationPath::<eol>"
    }
}


$results.Sort()
$results.Reverse()

return $results