master
ps1 59 lines 1.48 KB
Raw
1 #Requires -RunAsAdministrator
2
3 # This script downloads and installs the latest version of the WSL MSI package
4
5 # Get current language code
6 $chcp_num = (chcp) -replace '[^\d]+(\d+).*','$1'
7
8 # Set language to english
9 chcp 437
10
11 $ErrorActionPreference = "Stop"
12 Set-StrictMode -Version Latest
13
14 $release = Invoke-WebRequest 'https://api.github.com/repos/microsoft/WSL/releases/latest' | ConvertFrom-Json
15 $systeminfo = & systeminfo | findstr /C:"System Type"
16 if ($systeminfo -like '*x64*')
17 {
18 $target = '.x64.msi'
19 } elseif ($systeminfo -like '*arm64*')
20 {
21 $target = '.arm64.msi'
22 } else
23 {
24 throw 'Failed to determine system type ($systeminfo)'
25 }
26
27 [array]$assets = $release.assets | Where-Object { $_.name.ToLower().endswith('.x64.msi')}
28 if ($assets.count -ne 1)
29 {
30 throw 'Failed to find asset ($assets)'
31 }
32
33 $target = "$env:tmp\$($assets.name)"
34 Write-Host "Downloading $($assets.name) to $target"
35
36 $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
37 $headers.Add('Accept','application/octet-stream')
38
39 Invoke-WebRequest $assets.url -Out $target -Headers $headers
40
41 $MSIArguments = @(
42 "/i"
43 $target
44 "/qn"
45 "/norestart"
46 )
47
48 $exitCode = (Start-Process -Wait "msiexec.exe" -ArgumentList $MSIArguments -NoNewWindow -PassThru).ExitCode
49 if ($exitCode -Ne 0)
50 {
51 throw "Failed to install package: $exitCode"
52 }
53
54 Write-Host 'Installation complete'
55
56 Remove-Item $target -Force
57
58 # Restore original language
59 chcp $chcp_num