|
@@ -0,0 +1,66 @@
|
|
|
|
|
+<#
|
|
|
|
|
+.SYNOPSIS
|
|
|
|
|
+ Installs or updates Visual Studio on a local developer machine
|
|
|
|
|
+.PARAMETER Update
|
|
|
|
|
+ Update VS to latest version instead of modifying the installation to include new workloads.
|
|
|
|
|
+.PARAMETER Quiet
|
|
|
|
|
+ Whether to run installer in the background
|
|
|
|
|
+#>
|
|
|
|
|
+[CmdletBinding(DefaultParameterSetName = 'Default')]
|
|
|
|
|
+param(
|
|
|
|
|
+ [switch]$Update,
|
|
|
|
|
+ [switch]$Quiet
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+$ErrorActionPreference = 'Stop'
|
|
|
|
|
+Set-StrictMode -Version 1
|
|
|
|
|
+
|
|
|
|
|
+$intermedateDir = "$PSScriptRoot\obj"
|
|
|
|
|
+mkdir $intermedateDir -ErrorAction Ignore | Out-Null
|
|
|
|
|
+
|
|
|
|
|
+$bootstrapper = "$intermedateDir\vs_enterprise1.exe"
|
|
|
|
|
+Invoke-WebRequest -Uri 'https://aka.ms/vs/15/release/vs_enterprise.exe' -OutFile $bootstrapper
|
|
|
|
|
+
|
|
|
|
|
+$vsJson = "$PSScriptRoot\VsRequirements\vs.json"
|
|
|
|
|
+# no backslashes - this breaks the installer
|
|
|
|
|
+$vsInstallPath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Enterprise"
|
|
|
|
|
+$arguments = @(
|
|
|
|
|
+ '--installPath', "`"$vsInstallPath`"",
|
|
|
|
|
+ '--in', $vsJson,
|
|
|
|
|
+ '--wait',
|
|
|
|
|
+ '--norestart')
|
|
|
|
|
+
|
|
|
|
|
+if ($Update) {
|
|
|
|
|
+ $arguments = ,'update' + $arguments
|
|
|
|
|
+}
|
|
|
|
|
+else {
|
|
|
|
|
+ $arguments = ,'modify' + $arguments
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+if ($Quiet) {
|
|
|
|
|
+ $arguments += '--quiet'
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+Write-Host "Running '$bootstrapper $arguments' on $(hostname)"
|
|
|
|
|
+$process = Start-Process -FilePath $bootstrapper `
|
|
|
|
|
+ -ArgumentList $arguments `
|
|
|
|
|
+ -Verb runas `
|
|
|
|
|
+ -PassThru `
|
|
|
|
|
+ -ErrorAction Stop
|
|
|
|
|
+Write-Host "pid = $($process.Id)"
|
|
|
|
|
+Wait-Process -InputObject $process
|
|
|
|
|
+Write-Host "exit code = $($process.ExitCode)"
|
|
|
|
|
+
|
|
|
|
|
+# https://docs.microsoft.com/en-us/visualstudio/install/use-command-line-parameters-to-install-visual-studio#error-codes
|
|
|
|
|
+if ($process.ExitCode -eq 3010) {
|
|
|
|
|
+ Write-Warning "Agent $(hostname) requires restart to finish the VS update"
|
|
|
|
|
+}
|
|
|
|
|
+elseif ($process.ExitCode -eq 5007) {
|
|
|
|
|
+ Write-Error "Operation was blocked - the computer does not meet the requirements"
|
|
|
|
|
+}
|
|
|
|
|
+elseif (($process.ExitCode -eq 5004) -or ($process.ExitCode -eq 1602)) {
|
|
|
|
|
+ Write-Error "Operation was canceled"
|
|
|
|
|
+}
|
|
|
|
|
+elseif ($process.ExitCode -ne 0) {
|
|
|
|
|
+ Write-Error "Installation failed on $(hostname) for unknown reason"
|
|
|
|
|
+}
|