Welcome to mirror list, hosted at ThFree Co, Russian Federation.

find_vstool.ps1 « Tools - github.com/mRemoteNG/mRemoteNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: da2be6e1b8722dc741f38653fbe00fb4ae5dd604 (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
54
55
56
57
58
59
60
61
[CmdletBinding()]

param (
    [string]
    # Name of the file to find
    $FileName
)



function EditBinCertificateIsValid() {
    param (
        [string]
        $Path
    )

    # Verify file certificate
    $valid_microsoft_cert_thumbprints = @(
        "3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC",
        "98ED99A67886D020C564923B7DF25E9AC019DF26",
        "108E2BA23632620C427C570B6D9DB51AC31387FE",
        "5EAD300DC7E4D637948ECB0ED829A072BD152E17"
    )
    $file_signature = Get-AuthenticodeSignature -FilePath $Path
    if (($file_signature.Status -ne "Valid") -or ($valid_microsoft_cert_thumbprints -notcontains $file_signature.SignerCertificate.Thumbprint)) {
        Write-Warning "Could not validate the signature of $Path"
        return $false
    } else {
        return $true
    }
}


function ToolCanBeExecuted {
    param (
        [string]
        $Path
    )
    $null = & $Path
    Write-Output ($LASTEXITCODE -gt 0)
}

$rootSearchPaths = @(
    [System.IO.Directory]::EnumerateFileSystemEntries("C:\Program Files", "*Visual Studio*", [System.IO.SearchOption]::TopDirectoryOnly),
    [System.IO.Directory]::EnumerateFileSystemEntries("C:\Program Files (x86)", "*Visual Studio*", [System.IO.SearchOption]::TopDirectoryOnly)
)

# Returns the first full path to the $FileName that our search can find
foreach ($searchPath in $rootSearchPaths) {
    foreach ($visualStudioFolder in $searchPath) {
        Write-Verbose "Searching in folder '$visualStudioFolder'"
        $matchingExes = [System.IO.Directory]::EnumerateFileSystemEntries($visualStudioFolder, $FileName, [System.IO.SearchOption]::AllDirectories)
        foreach ($matchingExe in $matchingExes) {
            if ((EditBinCertificateIsValid -Path $matchingExe) -and (ToolCanBeExecuted -Path $matchingExe)) {
                return $matchingExe
            }
        }
    }
}

Write-Error "Could not find any valid file by the name $FileName." -ErrorAction Stop