Configurations/PowerShellLab/PostSetup/Install-VSCode.ps1
#requires -version 5.1 #Download and install the latest 64bit version of VSCode [CmdletBinding(DefaultParameterSetName = "VM")] Param( [Parameter(Mandatory, ParameterSetName = 'VM')] #specify the name of a VM [string]$VMName, [Parameter(Mandatory, ParameterSetName = 'VM')] #Specify the user credential [pscredential]$Credential, [Parameter(Mandatory, ParameterSetName = "session")] #specify an existing PSSession object [System.Management.Automation.Runspaces.PSSession]$Session ) #download the setup file on the host and then copy to VM to avoid strange name resolution problems $path = $env:temp $uri = 'https://vscode-update.azurewebsites.net/latest/win32-x64/stable' # 'https://vscode-update.azurewebsites.net/latest/win32-x64/stable' # 'https://go.microsoft.com/fwlink/?Linkid=852157' $out = Join-Path -Path $Path -ChildPath VSCodeSetup-x64.exe Try { Write-Host " Downloading from $uri" -foreground magenta Invoke-WebRequest -Uri $uri -OutFile $out -DisableKeepAlive -UseBasicParsing } Catch { Throw $_ #bail out Return } Try { if ($PSCmdlet.ParameterSetName -eq 'VM') { Write-Host "Creating PSSession to $VMName" -ForegroundColor cyan $session = New-PSSession @PSBoundParameters -ErrorAction stop } #copy the file to the VM copy-item -Path $out -Destination C:\ -ToSession $Session $sb = { $file = 'C:\VSCodeSetup-x64.exe' Write-Host "[$($env:computername)] Installing VSCode" -foreground magenta $loadInf = '@ [Setup] Lang=english Dir=C:\Program Files\Microsoft VS Code Group=Visual Studio Code NoIcons=0 Tasks=desktopicon,addcontextmenufiles,addcontextmenufolders,addtopath @' $infPath = "${env:TEMP}\load.inf" $loadInf | Out-File $infPath Start-Process -FilePath $file -ArgumentList "/VERYSILENT /LOADINF=${infPath}" -Wait Write-Host "[$($env:computername)] Finished Installing VSCode" -foreground magenta } #close scriptblock Invoke-Command -ScriptBlock $sb -Session $session if ($PSCmdlet.ParameterSetName -eq 'VM') { Write-Host "Removing PSSession" -ForegroundColor cyan $Session | Remove-PSSession } } Catch { Throw $_ } |