public/Get-VisualStudioTestConsolePath.ps1

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
function Get-VisualStudioTestConsolePath() {
    <#
    .SYNOPSIS
        Gets the path for the visual studio test console for the
        specified version of Visual Studio.
    .DESCRIPTION
        Gets the path for the visual studio test console for the
        specified version of Visual Studio. If no version is specified
        the latest version of Visual Studio found on the system is used.
 
    .PARAMETER Version
        The version of Visual Studio the cmdlet should lookup and
        return the Visual Studio Test Console path.
 
    .EXAMPLE
        PS C:\> $vsTestPath = Get-VisualStudioTestConsolePath
 
    .EXAMPLE
        PS C:\> $vsTestPath = Get-VsTestPath
         
    .OUTPUTS
        Returns the path for the Visual STudio Test Console
    #>

    Param(
        [Parameter(Position = 0)]
        [String] $Version, 
        [Switch] $VisualStudio,
        [Switch] $Latest
    )

    if($Latest.ToBool()) {
        $Version = "Latest"
;    }

    $vsTestPaths = Get-ModuleVariable -Name "VsTestPaths"

    if($vsTestPaths.ContainsKey($Version)) {
        return $vsTestPaths[$Version];
    }

    if([string]::IsNullOrWhiteSpace($Version)) {
        $Version = "Latest";
    }
    
    $paths = $null;

    if($VisualStudio.ToBool()) {
        $paths = Get-VisualStudioPath -Latest;
    } else {
        $paths = Get-BuildToolsPath -Latest;
        if(!$paths -or $Paths.Count -eq 0) {
            $paths = Get-VisualStudioPath -Latest;
        }
     }

     if($null -eq $paths -or $paths.Count -eq 0) {
        Write-Error "Unable to find an installed version of vstest console";
        return $null;
     }

     if($Version -eq "Latest") {
       
        if($paths -is [Array]) {
            $vsPath = Sort-Object -Property Name -Descending | Select-Object -Property Path -First 1 
        } else {
            $vsPath = $paths;
        }
        
     } else {
         foreach($set in $paths)
         {
             if($set.Name -eq $Version) {
                $vsPath = $set.Path;
                break;
             }
         }
    }
    
    if([string]::IsNullOrWhiteSpace($vsPath)) {
        Write-Warning "vsPath not found";
        return $null;
    }
    
    $vsTest ="$vsPath\Common7\IDE\Extensions\TestPlatform\VSTest.Console.exe"
    
    if(Test-Path "$vsTest") {
        $vsTestPaths.Add($Version, $vsTest);
        return $vsTest 
    }

   

    $vsTest = "$vsPath\Common7\IDE\CommonExtensions\Microsoft\TestWindow\VSTest.Console.exe"

    if(Test-Path $vsTest) {
        $vsTestPaths.Add($Version, $vsTest);
        return $vsTest
    }
    
    $vsTestPaths.Add($Version, $null);

    return $null;
}
Set-Alias -Name "Get-VsTestPath" -Value "Get-VisualStudioTestConsolePath"