Compare commits

..

5 Commits
v1.42 ... v1.45

Author SHA1 Message Date
Pete Batard
0b0643abc8 Remove Windows 7 downloads
* Since Microsoft removed the ISOs from their servers
* Closes #64
2023-04-14 11:42:34 +01:00
Dmitry Nefedov
1d88deac7c Improve code for P/Invoke
* Closes #62
2023-04-14 11:36:33 +01:00
Pete Batard
9025d258e8 Harmonise the use of $true/$false and not operator 2023-04-14 11:29:40 +01:00
Pete Batard
425eb4da24 Prevent Fido from running on non Windows platforms
* Per #58, we consider that letting non-Windows users run Fido is going to become
  too much of liability moving forward, so the script now detects non Windows
  platforms and actively prevent itself from running there.
* Closes #60.
* Also some whitespace cleanup.
2023-03-07 12:16:57 +00:00
Pete Batard
10acbf9f84 Improve error handling
* Simplify regex and fix unconverted characters.
* Also use Start-BitsTransfer for cmdline downloads (Closes #56).
* Also remove -DisableProgress now that we use Start-BitsTransfer.
2023-02-06 01:22:02 +00:00
3 changed files with 115 additions and 138 deletions

View File

@@ -2,7 +2,8 @@
root = true root = true
[*] [*]
trim_trailing_whitespace = true
insert_final_newline = true
# Must use a BOM else Unicode strings will not display # Must use a BOM else Unicode strings will not display
charset = utf-8-bom charset = utf-8-bom
insert_final_newline = true
indent_style = tab
trim_trailing_whitespace = true

219
Fido.ps1
View File

@@ -1,5 +1,5 @@
# #
# Fido v1.42 - Feature ISO Downloader, for retail Windows images and UEFI Shell # Fido v1.45 - Feature ISO Downloader, for retail Windows images and UEFI Shell
# Copyright © 2019-2023 Pete Batard <pete@akeo.ie> # Copyright © 2019-2023 Pete Batard <pete@akeo.ie>
# Command line support: Copyright © 2021 flx5 # Command line support: Copyright © 2021 flx5
# ConvertTo-ImageSource: Copyright © 2016 Chris Carter # ConvertTo-ImageSource: Copyright © 2016 Chris Carter
@@ -43,11 +43,9 @@ param(
# (Optional) Specify Windows architecture [Toggles commandline mode] # (Optional) Specify Windows architecture [Toggles commandline mode]
[string]$Arch, [string]$Arch,
# (Optional) Only display the download URL [Toggles commandline mode] # (Optional) Only display the download URL [Toggles commandline mode]
[switch]$GetUrl = $False, [switch]$GetUrl = $false,
# (Optional) Increase verbosity # (Optional) Increase verbosity
[switch]$Verbose = $False, [switch]$Verbose = $false
# (Optional) Disable the progress bar
[switch]$DisableProgress = $False
) )
#endregion #endregion
@@ -55,13 +53,27 @@ try {
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
} catch {} } catch {}
$Cmd = $False $Cmd = $false
if ($Win -or $Rel -or $Ed -or $Lang -or $Arch -or $GetUrl) { if ($Win -or $Rel -or $Ed -or $Lang -or $Arch -or $GetUrl) {
$Cmd = $True $Cmd = $true
} }
# Craft a decimal numeric version of Windows, since Windows 7's PowerShell is too stupid to compare it to a Version object # Return a decimal Windows version that we can then check for platform support.
$winver = [System.Environment]::OSVersion.Version.Major * 1.0 + [System.Environment]::OSVersion.Version.Minor * 0.1 # Note that because we don't want to have to support this script on anything
# other than Windows, this call returns 0.0 for PowerShell running on Linux/Mac.
function Get-Platform-Version()
{
$version = 0.0
$platform = [string][System.Environment]::OSVersion.Platform
# This will filter out non Windows platforms
if ($platform.StartsWith("Win")) {
# Craft a decimal numeric version of Windows
$version = [System.Environment]::OSVersion.Version.Major * 1.0 + [System.Environment]::OSVersion.Version.Minor * 0.1
}
return $version
}
$winver = Get-Platform-Version
# The default TLS for Windows 8.x doesn't work with Microsoft's servers so we must force it # The default TLS for Windows 8.x doesn't work with Microsoft's servers so we must force it
if ($winver -lt 10.0) { if ($winver -lt 10.0) {
@@ -69,15 +81,28 @@ if ($winver -lt 10.0) {
} }
#region Assembly Types #region Assembly Types
$code = @" $Drawing_Assembly = "System.Drawing"
# PowerShell 7 altered the name of the Drawing assembly...
if ($host.version -ge "7.0") {
$Drawing_Assembly += ".Common"
}
$Signature = @{
Namespace = "WinAPI"
Name = "Utils"
Language = "CSharp"
UsingNamespace = "System.Runtime", "System.IO", "System.Text", "System.Drawing", "System.Globalization"
ReferencedAssemblies = $Drawing_Assembly
ErrorAction = "Stop"
WarningAction = "Ignore"
MemberDefinition = @"
[DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = true, BestFitMapping = false, ThrowOnUnmappableChar = true)] [DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = true, BestFitMapping = false, ThrowOnUnmappableChar = true)]
internal static extern int ExtractIconEx(string sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons); internal static extern int ExtractIconEx(string sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons);
[DllImport("user32.dll")] [DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr handle, int state); public static extern bool ShowWindow(IntPtr handle, int state);
// Extract an icon from a DLL // Extract an icon from a DLL
public static Icon ExtractIcon(string file, int number, bool largeIcon) public static Icon ExtractIcon(string file, int number, bool largeIcon) {
{
IntPtr large, small; IntPtr large, small;
ExtractIconEx(file, number, out large, out small, 1); ExtractIconEx(file, number, out large, out small, 1);
try { try {
@@ -87,18 +112,19 @@ $code = @"
} }
} }
"@ "@
}
if (!$Cmd) { if (!$Cmd) {
Write-Host Please Wait... Write-Host Please Wait...
$Drawing_Assembly = "System.Drawing"
# PowerShell 7 altered the name of the Drawing assembly... if (!("WinAPI.Utils" -as [type]))
if ($host.version -ge "7.0") { {
$Drawing_Assembly += ".Common" Add-Type @Signature
} }
Add-Type -ErrorAction Stop -WarningAction Ignore -IgnoreWarnings -MemberDefinition $code -Namespace Gui -UsingNamespace System.Runtime, System.IO, System.Text, System.Drawing, System.Globalization -ReferencedAssemblies $Drawing_Assembly -Name Utils
Add-Type -AssemblyName PresentationFramework Add-Type -AssemblyName PresentationFramework
# Hide the powershell window: https://stackoverflow.com/a/27992426/1069307 # Hide the powershell window: https://stackoverflow.com/a/27992426/1069307
[Gui.Utils]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0) | Out-Null [WinAPI.Utils]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0) | Out-Null
} }
#endregion #endregion
@@ -283,15 +309,6 @@ $WindowsVersions = @(
@("Windows 8.1 KN", ($ko + 62)) @("Windows 8.1 KN", ($ko + 62))
) )
), ),
@(
@("Windows 7", "WIN7"),
@(
"with SP1 (build 7601)",
@("Windows 7 Ultimate", 0),
@("Windows 7 Professional", 1),
@("Windows 7 Home Premium", 2)
)
),
@( @(
@("UEFI Shell 2.2", "UEFI_SHELL 2.2"), @("UEFI Shell 2.2", "UEFI_SHELL 2.2"),
@( @(
@@ -328,42 +345,6 @@ $WindowsVersions = @(
) )
) )
) )
$Windows7Versions = @(
# 0: Windows 7 Ultimate
@(
# Need a dummy to prevent PS from coalescing single array entries
@(""),
@("English (US)", "en-us",
@(
@("x64", "https://download.microsoft.com/download/5/1/9/5195A765-3A41-4A72-87D8-200D897CBE21/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_ULTIMATE_x64FRE_en-us.iso"),
@("x86", "https://download.microsoft.com/download/1/E/6/1E6B4803-DD2A-49DF-8468-69C0E6E36218/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_ULTIMATE_x86FRE_en-us.iso")
)
)
),
# 1: Windows 7 Profesional
@(
@(""),
@("English (US)", "en-us",
@(
@("x64", "https://download.microsoft.com/download/0/6/3/06365375-C346-4D65-87C7-EE41F55F736B/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_PROFESSIONAL_x64FRE_en-us.iso"),
@("x86", "https://download.microsoft.com/download/C/0/6/C067D0CD-3785-4727-898E-60DC3120BB14/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_PROFESSIONAL_x86FRE_en-us.iso")
)
)
),
# 2: Windows 7 Home Premium
@(
@(""),
@("English (US)", "en-us",
@(
@("x64", "https://download.microsoft.com/download/E/A/8/EA804D86-C3DF-4719-9966-6A66C9306598/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_HOMEPREMIUM_x64FRE_en-us.iso"),
@("x86", "https://download.microsoft.com/download/E/D/A/EDA6B508-7663-4E30-86F9-949932F443D0/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_HOMEPREMIUM_x86FRE_en-us.iso")
)
)
)
)
#endregion #endregion
#region Functions #region Functions
@@ -413,9 +394,9 @@ function Select-Language([string]$LangName)
($SysLocale.StartsWith("tr") -and $LangName -like "*Turk*") -or ` ($SysLocale.StartsWith("tr") -and $LangName -like "*Turk*") -or `
($SysLocale.StartsWith("uk") -and $LangName -like "*Ukrain*") -or ` ($SysLocale.StartsWith("uk") -and $LangName -like "*Ukrain*") -or `
($SysLocale.StartsWith("vi") -and $LangName -like "*Vietnam*")) { ($SysLocale.StartsWith("vi") -and $LangName -like "*Vietnam*")) {
return $True return $true
} }
return $False return $false
} }
function Add-Entry([int]$pos, [string]$Name, [array]$Items, [string]$DisplayName) function Add-Entry([int]$pos, [string]$Name, [array]$Items, [string]$DisplayName)
@@ -508,7 +489,7 @@ function ConvertTo-ImageSource
function Throw-Error([object]$Req, [string]$Alt) function Throw-Error([object]$Req, [string]$Alt)
{ {
$Err = $(GetElementById -Request $Req -Id "errorModalMessage").innerText -replace "<[^>]+>" -replace "\s+", " " $Err = $(GetElementById -Request $Req -Id "errorModalMessage").innerText -replace "<[^>]+>" -replace "\s+", " "
if (-not $Err) { if (!$Err) {
$Err = $Alt $Err = $Alt
} else { } else {
$Err = [System.Text.Encoding]::UTF8.GetString([byte[]][char[]]$Err) $Err = [System.Text.Encoding]::UTF8.GetString([byte[]][char[]]$Err)
@@ -519,7 +500,7 @@ function Throw-Error([object]$Req, [string]$Alt)
# Translate a message string # Translate a message string
function Get-Translation([string]$Text) function Get-Translation([string]$Text)
{ {
if (-not $English -contains $Text) { if (!($English -contains $Text)) {
Write-Host "Error: '$Text' is not a translatable string" Write-Host "Error: '$Text' is not a translatable string"
return "(Untranslated)" return "(Untranslated)"
} }
@@ -557,7 +538,7 @@ function Error([string]$ErrorMessage)
if (!$Cmd) { if (!$Cmd) {
$XMLForm.Title = $(Get-Translation("Error")) + ": " + $ErrorMessage $XMLForm.Title = $(Get-Translation("Error")) + ": " + $ErrorMessage
Refresh-Control($XMLForm) Refresh-Control($XMLForm)
$XMLGrid.Children[2 * $script:Stage + 1].IsEnabled = $True $XMLGrid.Children[2 * $script:Stage + 1].IsEnabled = $true
$UserInput = [System.Windows.MessageBox]::Show($XMLForm.Title, $(Get-Translation("Error")), "OK", "Error") $UserInput = [System.Windows.MessageBox]::Show($XMLForm.Title, $(Get-Translation("Error")), "OK", "Error")
$script:ExitCode = $script:Stage-- $script:ExitCode = $script:Stage--
} else { } else {
@@ -627,10 +608,10 @@ if ($Cmd) {
$EnglishMessages = "en-US|Version|Release|Edition|Language|Architecture|Download|Continue|Back|Close|Cancel|Error|Please wait...|" + $EnglishMessages = "en-US|Version|Release|Edition|Language|Architecture|Download|Continue|Back|Close|Cancel|Error|Please wait...|" +
"Download using a browser|Download of Windows ISOs is unavailable due to Microsoft having altered their website to prevent it.|" + "Download using a browser|Download of Windows ISOs is unavailable due to Microsoft having altered their website to prevent it.|" +
"PowerShell 3.0 or later is required to run this script.|Do you want to go online and download it?|" + "PowerShell 3.0 or later is required to run this script.|Do you want to go online and download it?|" +
"This feature is not available for this version of Windows." "This feature is not available on this platform."
[string[]]$English = $EnglishMessages.Split('|') [string[]]$English = $EnglishMessages.Split('|')
[string[]]$Localized = $null [string[]]$Localized = $null
if ($LocData -and (-not $LocData.StartsWith("en-US"))) { if ($LocData -and !$LocData.StartsWith("en-US")) {
$Localized = $LocData.Split('|') $Localized = $LocData.Split('|')
# Adjust the $Localized array if we have more or fewer strings than in $EnglishMessages # Adjust the $Localized array if we have more or fewer strings than in $EnglishMessages
if ($Localized.Length -lt $English.Length) { if ($Localized.Length -lt $English.Length) {
@@ -657,7 +638,8 @@ function Size-To-Human-Readable([uint64]$size)
} }
# Check if the locale we want is available - Fall back to en-US otherwise # Check if the locale we want is available - Fall back to en-US otherwise
function Check-Locale { function Check-Locale
{
try { try {
$url = "https://www.microsoft.com/" + $QueryLocale + "/software-download/" $url = "https://www.microsoft.com/" + $QueryLocale + "/software-download/"
if ($Verbosity -ge 2) { if ($Verbosity -ge 2) {
@@ -830,13 +812,11 @@ function Get-Windows-Download-Links([int]$SelectedVersion, [int]$SelectedRelease
$ref = "https://www.microsoft.com/software-download/windows11" $ref = "https://www.microsoft.com/software-download/windows11"
$r = Invoke-WebRequest -Method Post -Headers @{ "Referer" = $ref } -UseBasicParsing -UserAgent $UserAgent -WebSession $Session $url $r = Invoke-WebRequest -Method Post -Headers @{ "Referer" = $ref } -UseBasicParsing -UserAgent $UserAgent -WebSession $Session $url
if ($r -match "errorModalMessage") { if ($r -match "errorModalMessage") {
$regex = New-Object Text.RegularExpressions.Regex '<p id="errorModalMessage">(.+?)<\/p>' $Alt = [regex]::Match($r, '<p id="errorModalMessage">(.+?)<\/p>').Groups[1].Value -replace "<[^>]+>" -replace "\s+", " " -replace "\?\?\?", "-"
$m = $regex.Match($r) if (!$Alt) {
# Make the typical error message returned by Microsoft's servers more presentable
$Alt = $m.Groups[1] -replace "<[^>]+>" -replace "\s+", " "
$Alt += " " + $SessionId + "."
if (-not $Alt) {
$Alt = "Could not retrieve architectures from server" $Alt = "Could not retrieve architectures from server"
} else {
$Alt += " " + $SessionId + "."
} }
Throw-Error -Req $r -Alt $Alt Throw-Error -Req $r -Alt $Alt
} }
@@ -853,7 +833,7 @@ function Get-Windows-Download-Links([int]$SelectedVersion, [int]$SelectedRelease
foreach ($var in $xml.inputs.input) { foreach ($var in $xml.inputs.input) {
$json = $var.value | ConvertFrom-Json; $json = $var.value | ConvertFrom-Json;
if ($json) { if ($json) {
if (($Is64 -and $json.DownloadType -eq "x64") -or (-not $Is64 -and $json.DownloadType -eq "x86")) { if (($Is64 -and $json.DownloadType -eq "x64") -or (!$Is64 -and $json.DownloadType -eq "x86")) {
$script:SelectedIndex = $i $script:SelectedIndex = $i
} }
$links += @(New-Object PsObject -Property @{ Type = $json.DownloadType; Link = $json.Uri }) $links += @(New-Object PsObject -Property @{ Type = $json.DownloadType; Link = $json.Uri })
@@ -875,7 +855,7 @@ function Get-Windows-Download-Links([int]$SelectedVersion, [int]$SelectedRelease
function Process-Download-Link([string]$Url) function Process-Download-Link([string]$Url)
{ {
try { try {
if ($PipeName -and -not $Check.IsChecked) { if ($PipeName -and !$Check.IsChecked) {
Send-Message -PipeName $PipeName -Message $Url Send-Message -PipeName $PipeName -Message $Url
} else { } else {
if ($Cmd) { if ($Cmd) {
@@ -886,10 +866,7 @@ function Process-Download-Link([string]$Url)
$tmp_size = [uint64]::Parse($str_size) $tmp_size = [uint64]::Parse($str_size)
$Size = Size-To-Human-Readable $tmp_size $Size = Size-To-Human-Readable $tmp_size
Write-Host "Downloading '$File' ($Size)..." Write-Host "Downloading '$File' ($Size)..."
if ($DisableProgress) { Start-BitsTransfer -Source $Url -Destination $File
$ProgressPreference = 'SilentlyContinue'
}
Invoke-WebRequest -UseBasicParsing -Uri $Url -OutFile $File
} else { } else {
Write-Host Download Link: $Url Write-Host Download Link: $Url
Start-Process -FilePath $Url Start-Process -FilePath $Url
@@ -910,9 +887,9 @@ if ($Cmd) {
$winLanguageName = $null $winLanguageName = $null
$winLink = $null $winLink = $null
# Windows 7 has become too much of a liability # Windows 7 and non Windows platforms are too much of a liability
if ($winver -le 6.1) { if ($winver -le 6.1) {
Error(Get-Translation("This feature is not available for this version of Windows.")) Error(Get-Translation("This feature is not available on this platform."))
exit 403 exit 403
} }
@@ -1074,7 +1051,7 @@ $XMLForm.Title = $AppTitle
if ($Icon) { if ($Icon) {
$XMLForm.Icon = $Icon $XMLForm.Icon = $Icon
} else { } else {
$XMLForm.Icon = [Gui.Utils]::ExtractIcon("imageres.dll", -5205, $true) | ConvertTo-ImageSource $XMLForm.Icon = [WinAPI.Utils]::ExtractIcon("imageres.dll", -5205, $true) | ConvertTo-ImageSource
} }
if ($Locale.StartsWith("ar") -or $Locale.StartsWith("fa") -or $Locale.StartsWith("he")) { if ($Locale.StartsWith("ar") -or $Locale.StartsWith("fa") -or $Locale.StartsWith("he")) {
$XMLForm.FlowDirection = "RightToLeft" $XMLForm.FlowDirection = "RightToLeft"
@@ -1083,9 +1060,9 @@ $WindowsVersionTitle.Text = Get-Translation("Version")
$Continue.Content = Get-Translation("Continue") $Continue.Content = Get-Translation("Continue")
$Back.Content = Get-Translation("Close") $Back.Content = Get-Translation("Close")
# Windows 7 has become too much of a liability # Windows 7 and non Windows platforms are too much of a liability
if ($winver -le 6.1) { if ($winver -le 6.1) {
Error(Get-Translation("This feature is not available for this version of Windows.")) Error(Get-Translation("This feature is not available on this platform."))
exit 403 exit 403
} }
@@ -1102,9 +1079,9 @@ $WindowsVersion.DisplayMemberPath = "Version"
# Button Action # Button Action
$Continue.add_click({ $Continue.add_click({
$script:Stage++ $script:Stage++
$XMLGrid.Children[2 * $Stage + 1].IsEnabled = $False $XMLGrid.Children[2 * $Stage + 1].IsEnabled = $false
$Continue.IsEnabled = $False $Continue.IsEnabled = $false
$Back.IsEnabled = $False $Back.IsEnabled = $false
Refresh-Control($Continue) Refresh-Control($Continue)
Refresh-Control($Back) Refresh-Control($Back)
@@ -1113,7 +1090,7 @@ $Continue.add_click({
1 { # Windows Version selection 1 { # Windows Version selection
$XMLForm.Title = Get-Translation($English[12]) $XMLForm.Title = Get-Translation($English[12])
Refresh-Control($XMLForm) Refresh-Control($XMLForm)
if ($WindowsVersion.SelectedValue.Version.StartsWith("Windows") -and $WindowsVersion.SelectedValue.Version -ne "Windows 7") { if ($WindowsVersion.SelectedValue.Version.StartsWith("Windows")) {
Check-Locale Check-Locale
} }
$releases = Get-Windows-Releases $WindowsVersion.SelectedValue.Index $releases = Get-Windows-Releases $WindowsVersion.SelectedValue.Index
@@ -1172,9 +1149,9 @@ $Continue.add_click({
$XMLForm.Close() $XMLForm.Close()
} }
} }
$Continue.IsEnabled = $True $Continue.IsEnabled = $true
if ($Stage -ge 0) { if ($Stage -ge 0) {
$Back.IsEnabled = $True $Back.IsEnabled = $true
} }
}) })
@@ -1184,7 +1161,7 @@ $Back.add_click({
} else { } else {
$XMLGrid.Children.RemoveAt(2 * $Stage + 3) $XMLGrid.Children.RemoveAt(2 * $Stage + 3)
$XMLGrid.Children.RemoveAt(2 * $Stage + 2) $XMLGrid.Children.RemoveAt(2 * $Stage + 2)
$XMLGrid.Children[2 * $Stage + 1].IsEnabled = $True $XMLGrid.Children[2 * $Stage + 1].IsEnabled = $true
$dh2 = $dh $dh2 = $dh
if ($Stage -eq 4 -and $PipeName) { if ($Stage -eq 4 -and $PipeName) {
$Check.Visibility = "Collapsed" $Check.Visibility = "Collapsed"
@@ -1218,8 +1195,8 @@ exit $ExitCode
# SIG # Begin signature block # SIG # Begin signature block
# MIIkWAYJKoZIhvcNAQcCoIIkSTCCJEUCAQExDzANBglghkgBZQMEAgEFADB5Bgor # MIIkWAYJKoZIhvcNAQcCoIIkSTCCJEUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDa8PrIe1NSjXqW # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCMJv431qiE9xy1
# rwtj7a1ha0/FMIwXSDFruNwgp2G8haCCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU # 2Km7MvT+QN0u+/w5ek1xMY9QLEDXQqCCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI # jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM # DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy # EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
@@ -1322,22 +1299,22 @@ exit $ExitCode
# aWMgQ29kZSBTaWduaW5nIENBIEVWIFIzNgIRAL+xUAG79ZLUlip3l+pzb6MwDQYJ # aWMgQ29kZSBTaWduaW5nIENBIEVWIFIzNgIRAL+xUAG79ZLUlip3l+pzb6MwDQYJ
# YIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK # YIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK
# KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG # KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG
# 9w0BCQQxIgQgZt1L7FY2zlXGm+elfLNq4whr0tPpkCErcZFwHcLK42kwDQYJKoZI # 9w0BCQQxIgQgU6kfzXtqFM95UYOKG40MSFBPYFNCnkglZ4Ymhc2Oyf0wDQYJKoZI
# hvcNAQEBBQAEggIAO7AqJKab0cMvAjNl+zVgKFQ9/8RSM1+6u9cJGz3boyIc8XHK # hvcNAQEBBQAEggIAoMhK/l7p5OwearMs4gke3tH8HQgc5U2/TTyo2EVwH5wO8UqS
# YnKrhVIelU4+iwcD+KIHfZK9R5p30PhKB34QpxarEQ1g7VBc+BMKwaFPcke/gPr6 # vkzWS94vWlzm2J+h/nZYBgHKQ6wGPxMVUxQb7IzwOmLL1WJESwybRV6RjdOgbOjX
# hgIJZbvUogqVA9/evJjX1ulwyh5CSUosIYZUyXdV7t75PlbQ04ndzXtd1LUjPKp+ # H1zxAjYGXAHvupUDY4BxEI3QCH+2zWyBVyzjQpcJvYFdcf4YhlbDTS1A+TgZ/nCj
# EGSOzObzpTzfrKKAH0T9IFafp5wV+w3Nt1KhT8UmpLEGuh0QURLp4YhYy/KmWo+2 # X6j4Fe8dxyM/Gsa9kA9Ar6Ogip1uaYD8/rILhAUEoL+OblbQo6aTz48Z5ibmFYHR
# wHeZsro7r1vS9J7099kD8+p1KnlgY63t2M3fY+5X7fPZ8jwGbFeEh0WyyzhNlqUd # QdoIscQ1TzZPAlKvcXkswIxICIYP52V7ooJH08TnE8wxQ5U9aT8K/BqfpGNtKI78
# Ut8F931EnwnXXA+Re1FRNFd00JjdpmFQpqkQHY5HKh6FAbAxBmOGM5Zv3mpmkVjS # 2XydZifpOuU7mVNgPH+q509Qz28pINGspTCfbxnzEZDf+mGC+pbokQxNv2ZjKUYB
# 9VVoX3RaQMoXGduYIF8RnfKN6DV8OKc0V1D9NOPJcK/XZur6vow5Htpikj2Dyrdm # Nf9BBgUJgaVRJBLHvaOHGhZaRu1Fbd0ykpJLd9EAEgAKCV5+SkpcaqOqDDaMEwJL
# kvMiK+sqkDGsqhIdiAYHfa8Pq2bMfB/AQs4kcF3gkBaRwZQSLr9blWF6H5mL01Qq # rGcD7TkF1U0hyW4ZPq5ICsHjzjnXsy+MMkjfYYhi03ZpJJw696F9Pq3M/fXemT9e
# YwCE3umpacP/P48PEDQ2kL4QYTvkIY8YL6Y81TXGfOxBj/EwQNalyaytln5+I7/0 # PMKLoOXPZefAOTyGcFVUdSL9ctxboRKVRl1z/94r1bqN4LiHng99CF+pazPtDa4e
# nn1/nfriVU91cFvf1CYaId4xWqCTboC/49KtSN1cUMZsHFZggoPk5wNJZ/UIEAd3 # E7QgGkKYYAaH2t2LGxxXFH8/ifg2EvOMWlqT0JFKD6K6s/j6jKI+Ucr7h3OSbhqc
# 2K7NiWxbUQA3wDiNrymEgts3lg3zV5DWGgYosWottpzYfWBcZqiI/65JT42hgg48 # R8MY+vshQdFpxD2aYLOAPhwg8vUcBeqYfNUNxXVoYBJuaKbr/hqS8pAEjUOhgg48
# MIIOOAYKKwYBBAGCNwMDATGCDigwgg4kBgkqhkiG9w0BBwKggg4VMIIOEQIBAzEN # MIIOOAYKKwYBBAGCNwMDATGCDigwgg4kBgkqhkiG9w0BBwKggg4VMIIOEQIBAzEN
# MAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgB # MAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgB
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCBgeYfVPt15f69ZGlb0XMap8ogxbbm0 # hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCAPk/eUEWByIigDrAkGcyON/txivadC
# dx/FX6105nFxYQIUUU2TzURLgm2l56wAV0nbgxAYczMYDzIwMjMwMTI3MTUxMTUy # G8BK3lF8ZDGmCQIUDt7R6LryZ+2Z9cbYbrHVRuYf3PEYDzIwMjMwNDE0MTA0MjE4
# WjADAgEeoIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMg # WjADAgEeoIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMg
# Q29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAv # Q29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAv
# BgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOg # BgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOg
@@ -1401,13 +1378,13 @@ exit $ExitCode
# A1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRy # A1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRy
# dXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBp # dXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBp
# bmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3 # bmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjMwMTI3MTUxMTUy # DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjMwNDE0MTA0MjE4
# WjAvBgkqhkiG9w0BCQQxIgQgeeqIeo9Kcp71ZTFGCM4j8vvANl2gqXHGZO7PVGZz # WjAvBgkqhkiG9w0BCQQxIgQgSRmRX32ZtvpctsTQsO6ZmUJ/MJA07g0cGrMcieDX
# 1ygwNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB # XE4wNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAAx1R1UnC8znHFbV2JkK+/UklEJH # PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAJmHrI1rxYP3Tn0turyB5Nt12cQj
# 2vkucu8cyPp6TS84T5Zpf9+TYV1JLYy00bmkXFdsY4ioS+GRd+ocGpgv887bQXKw # OJ3WvJtAGrW6uT2EJp2xWIYcf9lYPz35+ar/OGTh0WgV+Ci62lY8C+D4V+3BRPTe
# 7xEP4ouQ2MR2/o4wakDTy4GqzxL2awZSSJvaHLKk1H5+gkvkNcYV/vTkHgkpcUwC # 2NAD6PR+sNj/NocG0A+BT+4agepoXxOjBCsNlDxi+qxb42alJUuf/G9zz+G+HLuO
# Qqfh4P5unQwnCsQwOVtzgjSbrmslS5ctac66Vvjs6/0ewnTYQncnA04Us5tR/UPH # rVNSf0E97W+8iGyHv1QvJ+KMO9nppMPdSpjOXPu/pKsAMjmds5n8R7OSW6vFkIkt
# bWSajMeLGp4E1k/sWWU9V7+uiQqx1wo5Qs6AjXkEu0NpfFGgUM1Js7X4cRUpWumM # 9INEVTJHzMrSkE0DNRKmh2NBkSJOJn+5gNfINmhJ8LtKvuRhuW+7NvpBoKqsepBz
# /q23yClpxUHiDHPA1nhOHLuHlgn8RZwEdTB6ZOD0JIRVp3RpZ9Q+Qlu34qc= # E8lsh852z2vlN1kD7XAw1yDw4hTaJJrtA5V3q593/svRL5j9N+stc2dY2C0=
# SIG # End signature block # SIG # End signature block

View File

@@ -87,7 +87,6 @@ The options are:
architecture as the one from the current system. architecture as the one from the current system.
- `GetUrl`: By default, the script attempts to automatically launch the download. But when using the `-GetUrl` switch, - `GetUrl`: By default, the script attempts to automatically launch the download. But when using the `-GetUrl` switch,
the script only displays the download URL, which can then be piped into another command or into a file. the script only displays the download URL, which can then be piped into another command or into a file.
- `DisableProgress`: Disable progress report. This may speed up downloads when using the command line.
Examples of a commandline download: Examples of a commandline download: