Actualiser vscode/install.ps1
This commit is contained in:
@@ -1,20 +1,20 @@
|
|||||||
<#PSScriptInfo
|
<#PSScriptInfo
|
||||||
|
|
||||||
.VERSION 1.0.0
|
.VERSION 1.4.3
|
||||||
|
|
||||||
.GUID
|
.GUID 539e5585-7a02-4dd6-b9a6-5dd288d0a5d0
|
||||||
|
|
||||||
.AUTHOR
|
.AUTHOR Microsoft
|
||||||
|
|
||||||
.COMPANYNAME
|
.COMPANYNAME Microsoft Corporation
|
||||||
|
|
||||||
.COPYRIGHT
|
.COPYRIGHT (c) Microsoft Corporation
|
||||||
|
|
||||||
.TAGS install vscode installer
|
.TAGS install vscode installer
|
||||||
|
|
||||||
.LICENSEURI
|
.LICENSEURI https://github.com/PowerShell/vscode-powershell/blob/main/LICENSE.txt
|
||||||
|
|
||||||
.PROJECTURI
|
.PROJECTURI https://github.com/PowerShell/vscode-powershell/blob/main/scripts/Install-VSCode.ps1
|
||||||
|
|
||||||
.ICONURI
|
.ICONURI
|
||||||
|
|
||||||
@@ -25,34 +25,120 @@
|
|||||||
.EXTERNALSCRIPTDEPENDENCIES
|
.EXTERNALSCRIPTDEPENDENCIES
|
||||||
|
|
||||||
.RELEASENOTES
|
.RELEASENOTES
|
||||||
|
02/06/2021 - Fix an architecture check issue with non-English localizations.
|
||||||
|
--
|
||||||
|
01/04/2021 - Fix host for downloading VSCode.
|
||||||
|
--
|
||||||
|
07/10/2019 - Fix a version check when installing user-builds with Windows Powershell greater than 5.
|
||||||
|
--
|
||||||
|
30/08/2019 - Added functionality to install the "User Install" variant of Stable Edition.
|
||||||
|
--
|
||||||
|
07/11/2018 - Added support for PowerShell Core and macOS/Linux platforms.
|
||||||
|
--
|
||||||
|
15/08/2018 - Added functionality to install the new "User Install" variant of Insiders Edition.
|
||||||
|
--
|
||||||
|
21/03/2018 - Added functionality to install the VSCode context menus.
|
||||||
|
Also, VSCode is now always added to the search path.
|
||||||
|
--
|
||||||
|
20/03/2018 - Fix OS detection to prevent error
|
||||||
|
--
|
||||||
|
28/12/2017 - Added functionality to support 64-bit versions of VSCode
|
||||||
|
and support for installation of VSCode Insiders Edition.
|
||||||
|
--
|
||||||
|
Initial release.
|
||||||
#>
|
#>
|
||||||
|
|
||||||
<#
|
<#
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Installs Visual Studio Code
|
Installs Visual Studio Code, the PowerShell extension, and optionally
|
||||||
|
a list of additional extensions.
|
||||||
|
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
|
This script can be used to easily install Visual Studio Code and the
|
||||||
|
PowerShell extension on your machine. You may also specify additional
|
||||||
|
extensions to be installed using the -AdditionalExtensions parameter.
|
||||||
|
The -LaunchWhenDone parameter will cause VS Code to be launched as
|
||||||
|
soon as installation has completed.
|
||||||
|
|
||||||
|
Please contribute improvements to this script on GitHub!
|
||||||
|
|
||||||
|
https://github.com/PowerShell/vscode-powershell/blob/main/scripts/Install-VSCode.ps1
|
||||||
|
|
||||||
.PARAMETER Architecture
|
.PARAMETER Architecture
|
||||||
|
A validated string defining the bit version to download. Values can be either 64-bit or 32-bit.
|
||||||
|
If 64-bit is chosen and the OS Architecture does not match, then the 32-bit build will be
|
||||||
|
downloaded instead. If parameter is not used, then 64-bit is used as default.
|
||||||
|
|
||||||
.PARAMETER BuildEdition
|
.PARAMETER BuildEdition
|
||||||
|
A validated string defining which build edition or "stream" to download:
|
||||||
|
Stable or Insiders Edition (system install or user profile install).
|
||||||
|
If the parameter is not used, then stable is downloaded as default.
|
||||||
|
|
||||||
|
|
||||||
.PARAMETER AdditionalExtensions
|
.PARAMETER AdditionalExtensions
|
||||||
|
An array of strings that are the fully-qualified names of extensions to be
|
||||||
|
installed in addition to the PowerShell extension. The fully qualified
|
||||||
|
name is formatted as "<publisher name>.<extension name>" and can be found
|
||||||
|
next to the extension's name in the details tab that appears when you
|
||||||
|
click an extension in the Extensions panel in Visual Studio Code.
|
||||||
|
|
||||||
.PARAMETER LaunchWhenDone
|
.PARAMETER LaunchWhenDone
|
||||||
|
When present, causes Visual Studio Code to be launched as soon as installation
|
||||||
|
has finished.
|
||||||
|
|
||||||
|
.PARAMETER EnableContextMenus
|
||||||
|
When present, causes the installer to configure the Explorer context menus
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
Install-VSCode.ps1 -Architecture 64-bit -BuildEdition stable -LaunchWhenDone -AdditionalExtensions 'eamodio.gitlens', 'vscodevim.vim'
|
Install-VSCode.ps1 -Architecture 32-bit
|
||||||
|
|
||||||
|
Installs Visual Studio Code (32-bit) and the powershell extension.
|
||||||
|
.EXAMPLE
|
||||||
|
Install-VSCode.ps1 -LaunchWhenDone
|
||||||
|
|
||||||
|
Installs Visual Studio Code (64-bit) and the PowerShell extension and then launches
|
||||||
|
the editor after installation completes.
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
Install-VSCode.ps1 -AdditionalExtensions 'eamodio.gitlens', 'vscodevim.vim'
|
||||||
|
|
||||||
|
Installs Visual Studio Code (64-bit), the PowerShell extension, and additional
|
||||||
|
extensions.
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
Install-VSCode.ps1 -BuildEdition Insider-User -LaunchWhenDone
|
||||||
|
|
||||||
|
Installs Visual Studio Code Insiders Edition (64-bit) to the user profile and then launches the editor
|
||||||
|
after installation completes.
|
||||||
|
|
||||||
.NOTES
|
.NOTES
|
||||||
|
This script is licensed under the MIT License:
|
||||||
|
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
#>
|
#>
|
||||||
[CmdletBinding()]
|
[CmdletBinding(SupportsShouldProcess=$true)]
|
||||||
Param(
|
param(
|
||||||
[parameter()]
|
[parameter()]
|
||||||
[ValidateSet(,"64-bits","32-bits")]
|
[ValidateSet('64-bit', '32-bit')]
|
||||||
[string]$Architecture = "64-bits",
|
[string]$Architecture = '64-bit',
|
||||||
|
|
||||||
[parameter()]
|
[parameter()]
|
||||||
[ValidateSet('Stable-System', 'Stable-User', 'Insider-System', 'Insider-User')]
|
[ValidateSet('Stable-System', 'Stable-User', 'Insider-System', 'Insider-User')]
|
||||||
@@ -75,85 +161,227 @@ Param(
|
|||||||
[switch]$EnableContextMenus
|
[switch]$EnableContextMenus
|
||||||
)
|
)
|
||||||
|
|
||||||
If (($PSVersionTable.PSVersion.Major -le 5) -or $IsWindows) {
|
# Determine the OS and architecture
|
||||||
|
Function Test-IsOsArchX64 {
|
||||||
|
|
||||||
Switch ($Architecture) {
|
If ($PSVersionTable.PSVersion.Major -lt 6) {
|
||||||
"64-bits" {
|
Return (Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture -match '64'
|
||||||
|
}
|
||||||
|
|
||||||
If ((Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture -eq "64 bits") {
|
Return [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq [System.Runtime.InteropServices.Architecture]::X64
|
||||||
$codePath = $env:ProgramFiles
|
}
|
||||||
$bitVersion = "win32-x64-user"
|
|
||||||
}
|
|
||||||
Else {
|
# Determine the OS
|
||||||
$codePath = $env:ProgramFiles
|
Function Get-CodePlatformInformation {
|
||||||
$bitVersion = "win32-arm64-user"
|
Param(
|
||||||
$Architecture = "32-bits"
|
[Parameter(Mandatory=$true)]
|
||||||
}
|
[ValidateSet('32-bit', '64-bit')]
|
||||||
Break;
|
[string]
|
||||||
}
|
$Bitness,
|
||||||
"32-bits" {
|
|
||||||
Write-host "32-bits"
|
[Parameter(Mandatory=$true)]
|
||||||
If ((Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture -eq "32 bits"){
|
[ValidateSet('Stable-System', 'Stable-User', 'Insider-System', 'Insider-User')]
|
||||||
#$codePath = $env:ProgramFiles
|
[string]
|
||||||
$codePath = ${env:ProgramFiles}
|
$BuildEdition
|
||||||
$bitVersion = "win32-arm64-user"
|
)
|
||||||
}
|
|
||||||
Else {
|
If ($Bitness -ne '64-bit' -and $os -ne 'Windows') {
|
||||||
$codePath = ${env:ProgramFiles(x86)}
|
throw "Non-64-bit *nix systems are not supported"
|
||||||
$bitVersion = "win32-x64-user"
|
}
|
||||||
}
|
|
||||||
Break;
|
If ($BuildEdition.EndsWith('User') -and $os -ne 'Windows') {
|
||||||
}
|
throw 'User builds are not available for non-Windows systems'
|
||||||
}
|
}
|
||||||
|
|
||||||
Switch ($BuildEdition) {
|
Switch ($BuildEdition) {
|
||||||
"Stable" {
|
|
||||||
$codeCmdPath = "$codePath\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd"
|
'Stable-System' {
|
||||||
$appName = "Visual Studio Code - Stable Edition ($($Architecture))"
|
$appName = "Visual Studio Code ($Bitness)"
|
||||||
Break;
|
$exePath = "$installBase\Microsoft VS Code\bin\code.cmd"
|
||||||
|
$channel = 'stable'
|
||||||
|
Break
|
||||||
}
|
}
|
||||||
"Insider" {
|
|
||||||
$codeCmdPath = "$codePath\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd"
|
'Stable-User' {
|
||||||
$appName = "Visual Studio Code - Insiders Edition ($($Architecture))"
|
$appName = "Visual Studio Code ($($Architecture) - User)"
|
||||||
Break;
|
$exePath = "${env:LocalAppData}\Programs\Microsoft VS Code\bin\code.cmd"
|
||||||
|
$channel = 'stable'
|
||||||
|
$platform += '-user'
|
||||||
|
Break
|
||||||
|
}
|
||||||
|
|
||||||
|
'Insider-System' {
|
||||||
|
$appName = "Visual Studio Code - Insiders Edition ($Bitness)"
|
||||||
|
$exePath = "$installBase\Microsoft VS Code Insiders\bin\code-insiders.cmd"
|
||||||
|
$channel = 'insider'
|
||||||
|
Break
|
||||||
|
}
|
||||||
|
|
||||||
|
'Insider-User' {
|
||||||
|
$appName = "Visual Studio Code - Insiders Edition ($($Architecture) - User)"
|
||||||
|
$exePath = "${env:LocalAppData}\Programs\Microsoft VS Code Insiders\bin\code-insiders.cmd"
|
||||||
|
$channel = 'insider'
|
||||||
|
$platform += '-user'
|
||||||
|
Break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Write-Host $($bitVersion)
|
|
||||||
|
|
||||||
Try {
|
$ext = 'exe'
|
||||||
$ProgressPreference = 'SilentlyContinue'
|
|
||||||
|
|
||||||
If (!(Test-Path $codeCmdPath)) {
|
Switch ($Bitness) {
|
||||||
Write-Host "`nTéléchargement de la dernière version $appName..." -ForegroundColor Yellow
|
|
||||||
Remove-Item -Force "$env:TEMP\vscode-$($BuildEdition).exe" -ErrorAction SilentlyContinue
|
'32-bit' {
|
||||||
Invoke-WebRequest -Uri "https://code.visualstudio.com/sha/download?build=$($BuildEdition)&os=$($bitVersion)" -OutFile "$env:TEMP\vscode-$($BuildEdition).exe"
|
$platform = 'win32'
|
||||||
|
|
||||||
Write-Host "`nInstallation $appName..." -ForegroundColor Yellow
|
If (Test-IsOsArchX64) {
|
||||||
Start-Process -Wait "$env:TEMP\vscode-$($BuildEdition).exe" -ArgumentList /silent, /mergetasks=!runcode
|
$installBase = ${env:ProgramFiles(x86)}
|
||||||
}
|
BBreak
|
||||||
Else {
|
}
|
||||||
Write-Host "`n$appName est déjà installé." -ForegroundColor Yellow
|
|
||||||
|
$installBase = ${env:ProgramFiles}
|
||||||
|
Break
|
||||||
}
|
}
|
||||||
|
|
||||||
$extensions = @("ms-vscode.PowerShell") + $AdditionalExtensions
|
'64-bit' {
|
||||||
|
$installBase = ${env:ProgramFiles}
|
||||||
|
|
||||||
|
If (Test-IsOsArchX64) {
|
||||||
|
$platform = 'win32-x64'
|
||||||
|
Break
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Warning '64-bit install requested on 32-bit system. Installing 32-bit VSCode'
|
||||||
|
$platform = 'win32'
|
||||||
|
Break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$info = @{
|
||||||
|
AppName = $appName
|
||||||
|
ExePath = $exePath
|
||||||
|
Platform = $platform
|
||||||
|
Channel = $channel
|
||||||
|
FileUri = "https://update.code.visualstudio.com/latest/$platform/$channel"
|
||||||
|
#"https://code.visualstudio.com/sha/download?build=$($BuildEdition)&os=$($bitVersion)"
|
||||||
|
Extension = $ext
|
||||||
|
}
|
||||||
|
|
||||||
|
Return $info
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Save-WithBitsTransfer {
|
||||||
|
Param(
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string]
|
||||||
|
$FileUri,
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string]
|
||||||
|
$Destination,
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string]
|
||||||
|
$AppName
|
||||||
|
)
|
||||||
|
|
||||||
|
Write-Host "`nTéléchargement de la dernière version $AppName ..." -ForegroundColor Yellow
|
||||||
|
|
||||||
|
Remove-Item -Force $Destination -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
$bitsDl = Start-BitsTransfer $FileUri -Destination $Destination -Asynchronous
|
||||||
|
|
||||||
|
while (($bitsDL.JobState -eq 'Transferring') -or ($bitsDL.JobState -eq 'Connecting')) {
|
||||||
|
Write-Progress -Activity "Downloading: $AppName" -Status "$([math]::round($bitsDl.BytesTransferred / 1mb))mb / $([math]::round($bitsDl.BytesTotal / 1mb))mb" -PercentComplete ($($bitsDl.BytesTransferred) / $($bitsDl.BytesTotal) * 100 )
|
||||||
|
}
|
||||||
|
|
||||||
|
Switch ($bitsDl.JobState) {
|
||||||
|
|
||||||
|
'Transferred' {
|
||||||
|
Complete-BitsTransfer -BitsJob $bitsDl
|
||||||
|
Break
|
||||||
|
}
|
||||||
|
|
||||||
|
'Error' {
|
||||||
|
write-host 'Erreur de téléchargement du média d installation.'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# User builds can only be installed on Windows systems
|
||||||
|
If ($BuildEdition.EndsWith('User') -and -not ($IsWindows -or $PSVersionTable.PSVersion.Major -lt 6)) {
|
||||||
|
write-host 'Les builds des utilisateurs ne sont pas disponibles pour les systèmes non Windows.'
|
||||||
|
}
|
||||||
|
|
||||||
|
Try {
|
||||||
|
$prevProgressPreference = $ProgressPreference
|
||||||
|
$ProgressPreference = 'SilentlyContinue'
|
||||||
|
|
||||||
|
# Obtenir les informations nécessaires à l'installation
|
||||||
|
$codePlatformInfo = Get-CodePlatformInformation -Bitness $Architecture -BuildEdition $BuildEdition
|
||||||
|
|
||||||
|
# Télécharger le programme d'installation
|
||||||
|
$tmpdir = [System.IO.Path]::GetTempPath()
|
||||||
|
|
||||||
|
$ext = $codePlatformInfo.Extension
|
||||||
|
$installerName = "vscode-install.$ext"
|
||||||
|
|
||||||
|
$installerPath = [System.IO.Path]::Combine($tmpdir, $installerName)
|
||||||
|
|
||||||
|
If ($PSVersionTable.PSVersion.Major -le 5) {
|
||||||
|
Save-WithBitsTransfer -FileUri $codePlatformInfo.FileUri -Destination $installerPath -AppName $codePlatformInfo.AppName
|
||||||
|
}
|
||||||
|
# We don't want to use RPM packages -- see the installation step below
|
||||||
|
Elseif ($codePlatformInfo.Extension -ne 'rpm') {
|
||||||
|
If ($PSCmdlet.ShouldProcess($codePlatformInfo.FileUri, "Invoke-WebRequest -OutFile $installerPath")) {
|
||||||
|
Invoke-WebRequest -Uri $codePlatformInfo.FileUri -OutFile $installerPath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Installer le VSCode
|
||||||
|
$exeArgs = '/verysilent /tasks=addtopath'
|
||||||
|
If ($EnableContextMenus) {
|
||||||
|
$exeArgs = '/verysilent /tasks=addcontextmenufiles,addcontextmenufolders,addtopath'
|
||||||
|
}
|
||||||
|
|
||||||
|
If (-not $PSCmdlet.ShouldProcess("$installerPath $exeArgs", 'Start-Process -Wait')) {
|
||||||
|
Break
|
||||||
|
}
|
||||||
|
|
||||||
|
Start-Process -Wait $installerPath -ArgumentList $exeArgs
|
||||||
|
Break
|
||||||
|
|
||||||
|
$codeExePath = $codePlatformInfo.ExePath
|
||||||
|
|
||||||
|
# Installer les extensions
|
||||||
|
$extensions = @("ms-vscode.PowerShell") + $AdditionalExtensions
|
||||||
|
If ($PSCmdlet.ShouldProcess(($extensions -join ','), "$codeExePath --install-extension")) {
|
||||||
|
|
||||||
Foreach ($extension in $extensions) {
|
Foreach ($extension in $extensions) {
|
||||||
Write-Host "`nInstallation de l'extension $extension ..." -ForegroundColor Yellow
|
Write-Host "`nInstallation de l'extension $extension ..." -ForegroundColor Yellow
|
||||||
& $codeCmdPath --install-extension $extension
|
& $codeExePath --install-extension $extension
|
||||||
}
|
}
|
||||||
|
|
||||||
If ($LaunchWhenDone) {
|
|
||||||
Write-Host "`nInstallation terminée, démarrage $appName...`n`n" -ForegroundColor Green
|
|
||||||
& $codeCmdPath
|
|
||||||
}
|
|
||||||
Else {
|
|
||||||
Write-Host "`nL'installation est terminé !`n`n" -ForegroundColor Green
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Finally {
|
|
||||||
$ProgressPreference = 'Continue'
|
# Lancement si demandé
|
||||||
|
If ($LaunchWhenDone) {
|
||||||
|
$appName = $codePlatformInfo.AppName
|
||||||
|
|
||||||
|
If (-not $PSCmdlet.ShouldProcess($appName, "Lancer avec $codeExePath")) {
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "`nInstallation complète, démarrage $appName...`n`n" -ForegroundColor Green
|
||||||
|
& $codeExePath
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
If ($PSCmdlet.ShouldProcess('Installation est terminée!', 'Write-Host')) {
|
||||||
|
Write-Host "`nInstallation est terminée!`n`n" -ForegroundColor Green
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Else {
|
Finally {
|
||||||
Write-Error "Ce script n'est actuellement pris en charge que par le système d'exploitation Windows."
|
$ProgressPreference = $prevProgressPreference
|
||||||
}
|
}
|
Reference in New Issue
Block a user