You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.5 KiB
PowerShell
48 lines
1.5 KiB
PowerShell
###
|
|
# Visual Studio helper functions
|
|
###
|
|
|
|
function Get-VSWhere {
|
|
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe";
|
|
|
|
if (-not (Test-Path $vswhere )) {
|
|
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
|
|
$vswhere = ".\vswhere.exe"
|
|
$vswhereApiUri = "https://api.github.com/repos/Microsoft/vswhere/releases/latest"
|
|
$tag = (Invoke-RestMethod -Uri $vswhereApiUri)[0].tag_name
|
|
$vswhereUri = "https://github.com/Microsoft/vswhere/releases/download/$tag/vswhere.exe"
|
|
Invoke-WebRequest -Uri $vswhereUri -OutFile $vswhere | Out-Null
|
|
}
|
|
|
|
return $vswhere
|
|
}
|
|
|
|
function Invoke-Environment
|
|
{
|
|
Param
|
|
(
|
|
[Parameter(Mandatory)]
|
|
[string]
|
|
$Command
|
|
)
|
|
|
|
& "${env:COMSPEC}" /s /c "`"$Command`" -no_logo && set" | Foreach-Object {
|
|
if ($_ -match '^([^=]+)=(.*)') {
|
|
[System.Environment]::SetEnvironmentVariable($matches[1], $matches[2])
|
|
}
|
|
}
|
|
}
|
|
|
|
function Get-VSInstallationPath {
|
|
$vswhere = Get-VSWhere
|
|
$installationPath = & $vswhere -prerelease -legacy -latest -property installationPath
|
|
|
|
return $installationPath
|
|
}
|
|
|
|
function Invoke-VSDevEnvironment {
|
|
Write-Host "Invoke-VSDevEnvironment had been invoked"
|
|
$installationPath = Get-VSInstallationPath
|
|
$envFilepath = Join-Path $installationPath "Common7\Tools\vsdevcmd.bat"
|
|
Invoke-Environment -Command $envFilepath
|
|
} |