mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 14:07:46 +08:00
Do not attempt to verify the fingerprint since it changes often. It seems to be overkill to check it.
63 lines
2.2 KiB
PowerShell
63 lines
2.2 KiB
PowerShell
[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",
|
|
"97221B97098F37A135DCC212E2B41E452BCE51F2"
|
|
)
|
|
$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 $($file_signature.SignerCertificate.Thumbprint)"
|
|
Write-Output "file_signature.SignerCertificate.Thumbprint: $($file_signature.SignerCertificate.Thumbprint)"
|
|
return $false
|
|
} else {
|
|
return $true
|
|
}
|
|
}
|
|
|
|
function ToolCanBeExecuted {
|
|
param (
|
|
[string]
|
|
$Path
|
|
)
|
|
$env:PATHEXT.Contains((Get-Item $Path).Extension.ToUpper())
|
|
}
|
|
|
|
|
|
$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)) {
|
|
if (ToolCanBeExecuted -Path $matchingExe) {
|
|
return $matchingExe
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Write-Error "Could not find any valid file by the name $FileName." -ErrorAction Stop |