Compare commits

..

7 Commits
v1.49 ... v1.56

Author SHA1 Message Date
Pete Batard
06a14ba11c Add UEFI Shell 24H1 ISO downloads 2024-05-30 13:16:38 +01:00
Pete Batard
4e6f25f351 Work around the latest Microsoft server restrictions
* It looks like Microsoft are actively filtering our script by detecting our first request with the
  spoofed user-agent, so work around that.
* Also switch to using 'curl' instead of 'Invoke-WebRequest'. May break PowerShell 7.0, but I'm only
  concerned about Rufus usage for now.
* Also add timeouts on web requests.
* Closes #88.
2024-02-07 15:55:59 +00:00
Pete Batard
d43d7aeee3 Add Windows 11 23H2 v2 downloads
* With thanks to @ave9858.
* Closes #83.
2023-12-19 10:27:44 +00:00
Pete Batard
d8b2d24242 Add UEFI Shell 23H2 ISO downloads
* Also fix Windows 11 23H2 build version since Microsoft are *UTTERLY USELESS*
  at providing an accurate product version number in the .wim's XML versioning
  files they are in bloody charge of populating...
2023-11-25 17:55:01 +00:00
Pete Batard
903cae2f00 Add Windows 11 23H2 downloads
* Replaces Windows 11 22H2, since past history indicates that Microsoft is
  not going to keep the Windows 11 22H2 ISOs available for much longer.
* Note that Microsoft has *no* plans to ever release a Windows 10 23H2.
* Closes #76.
2023-10-31 19:23:43 +01:00
Pete Batard
5d4a4d7d14 Fix a regression with IgnoreWarnings
* Commit 1d88deac7c removed the IgnoreWarnings flag which was
  needed as a fix for pbatard/rufus#2030.
* Contributed by @Tom-EllisEVENTS.
* Closes pbatard/rufus#2315.
2023-09-08 18:35:53 +01:00
Pete Batard
4a694421af Add UEFI Shell 2.2 23H1 download 2023-06-06 13:49:50 +01:00

View File

@@ -1,6 +1,6 @@
#
# Fido v1.49 - Feature ISO Downloader, for retail Windows images and UEFI Shell
# Copyright © 2019-2023 Pete Batard <pete@akeo.ie>
# Fido v1.56 - Feature ISO Downloader, for retail Windows images and UEFI Shell
# Copyright © 2019-2024 Pete Batard <pete@akeo.ie>
# Command line support: Copyright © 2021 flx5
# ConvertTo-ImageSource: Copyright © 2016 Chris Carter
#
@@ -97,6 +97,7 @@ $Signature = @{
ReferencedAssemblies = $Drawing_Assembly
ErrorAction = "Stop"
WarningAction = "Ignore"
IgnoreWarnings = $true
MemberDefinition = @"
[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);
@@ -137,9 +138,9 @@ $WindowsVersions = @(
@(
@("Windows 11", "windows11"),
@(
"22H2 v2 (Build 22621.1702 - 2023.05)",
@("Windows 11 Home/Pro/Edu", 2616),
@("Windows 11 Home China ", ($zh + 2617))
"23H2 v2 (Build 22631.2861 - 2023.12)",
@("Windows 11 Home/Pro/Edu", 2935),
@("Windows 11 Home China ", ($zh + 2936))
)
),
@(
@@ -163,6 +164,21 @@ $WindowsVersions = @(
),
@(
@("UEFI Shell 2.2", "UEFI_SHELL 2.2"),
@(
"24H1 (edk2-stable202405)",
@("Release", 0),
@("Debug", 1)
),
@(
"23H2 (edk2-stable202311)",
@("Release", 0),
@("Debug", 1)
),
@(
"23H1 (edk2-stable202305)",
@("Release", 0),
@("Debug", 1)
),
@(
"22H2 (edk2-stable202211)",
@("Release", 0),
@@ -426,6 +442,7 @@ function Get-RandomDate()
#region Globals
$ErrorActionPreference = "Stop"
$DefaultTimeout = 30
$dh = 58
$Stage = 0
$SelectedIndex = 0
@@ -497,8 +514,18 @@ function Check-Locale
if ($Verbosity -ge 2) {
Write-Host Querying $url
}
Invoke-WebRequest -UseBasicParsing -MaximumRedirection 0 -UserAgent $UserAgent $url | Out-Null
# Looks Microsoft are filtering our script according to the first query it performs with the spoofed user agent.
# So, to continue this pointless cat and mouse game, we simply add an extra first query with the default user agent.
# Also: "Hi Microsoft. You sure have A LOT OF RESOURCES TO WASTE to have assigned folks of yours to cripple scripts
# that merely exist because you have chosen to make the user experience from your download website utterly subpar.
# And while I am glad senpai noticed me (UwU), I feel compelled to ask: Don't you guys have better things to do?"
curl -UseBasicParsing -TimeoutSec $DefaultTimeout -MaximumRedirection 0 $url | Out-Null
curl -UseBasicParsing -TimeoutSec $DefaultTimeout -MaximumRedirection 0 -UserAgent $UserAgent $url | Out-Null
} catch {
# Of course PowerShell 7 had to BREAK $_.Exception.Status on timeouts...
if ($_.Exception.Status -eq "Timeout" -or $_.Exception.GetType().Name -eq "TaskCanceledException") {
Write-Host Operation Timed out
}
$script:QueryLocale = "en-US"
}
}
@@ -553,7 +580,7 @@ function Get-Windows-Languages([int]$SelectedVersion, [int]$SelectedEdition)
Write-Host Querying $url
}
try {
Invoke-WebRequest -UseBasicParsing -MaximumRedirection 0 -UserAgent $UserAgent $url | Out-Null
curl -UseBasicParsing -TimeoutSec $DefaultTimeout -MaximumRedirection 0 -UserAgent $UserAgent $url | Out-Null
} catch {
Error($_.Exception.Message)
return @()
@@ -572,7 +599,7 @@ function Get-Windows-Languages([int]$SelectedVersion, [int]$SelectedEdition)
$script:SelectedIndex = 0
try {
$r = Invoke-WebRequest -Method Post -UseBasicParsing -UserAgent $UserAgent -SessionVariable "Session" $url
$r = curl -Method Post -UseBasicParsing -TimeoutSec $DefaultTimeout -UserAgent $UserAgent -SessionVariable "Session" $url
if ($r -match "errorModalMessage") {
Throw-Error -Req $r -Alt "Could not retrieve languages from server"
}
@@ -662,7 +689,7 @@ function Get-Windows-Download-Links([int]$SelectedVersion, [int]$SelectedRelease
$Is64 = [Environment]::Is64BitOperatingSystem
# Must add a referer for this request, else Microsoft's servers will deny it
$ref = "https://www.microsoft.com/software-download/windows11"
$r = Invoke-WebRequest -Method Post -Headers @{ "Referer" = $ref } -UseBasicParsing -UserAgent $UserAgent -WebSession $Session $url
$r = curl -Method Post -Headers @{ "Referer" = $ref } -UseBasicParsing -TimeoutSec $DefaultTimeout -UserAgent $UserAgent -WebSession $Session $url
if ($r -match "errorModalMessage") {
$Alt = [regex]::Match($r.Content, '<p id="errorModalMessage">(.+?)<\/p>').Groups[1].Value -replace "<[^>]+>" -replace "\s+", " " -replace "\?\?\?", "-"
$Alt = [System.Text.Encoding]::UTF8.GetString([byte[]][char[]]$Alt)
@@ -715,7 +742,7 @@ function Process-Download-Link([string]$Url)
$pattern = '.*\/(.*\.iso).*'
$File = [regex]::Match($Url, $pattern).Groups[1].Value
# PowerShell implicit conversions are iffy, so we need to force them...
$str_size = (Invoke-WebRequest -UseBasicParsing -Uri $Url -Method Head).Headers.'Content-Length'
$str_size = (curl -UseBasicParsing -TimeoutSec $DefaultTimeout -Uri $Url -Method Head).Headers.'Content-Length'
$tmp_size = [uint64]::Parse($str_size)
$Size = Size-To-Human-Readable $tmp_size
Write-Host "Downloading '$File' ($Size)..."
@@ -1048,8 +1075,8 @@ exit $ExitCode
# SIG # Begin signature block
# MIIkWAYJKoZIhvcNAQcCoIIkSTCCJEUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDs/90zfCBKVjL6
# NsWYvK3K9j/kIecureg1h1y07zjzR6CCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCD+x1KfwoalW3t
# +j1Qn14VTLu8yO8vHTqfh8WnOWfDH6CCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
@@ -1152,22 +1179,22 @@ exit $ExitCode
# aWMgQ29kZSBTaWduaW5nIENBIEVWIFIzNgIRAL+xUAG79ZLUlip3l+pzb6MwDQYJ
# YIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK
# KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG
# 9w0BCQQxIgQgMyyVuGXqf+O/eIDvvD9B344chIv7KfK4w7bV/PgW8VowDQYJKoZI
# hvcNAQEBBQAEggIAGb3ptec4gdhwtOpkl074rSknxV08drYkf4h2nd4sVIRiQtJ4
# 4o9jDt1r0akTIXQDTb/VGk5iKLrVBy7VYIA4ule2lwdYsyiovjjwULxidixjfSS5
# KQbpSEcUwD3JAWug7krdb5nqMmK+GHrqjxYxg9OUw/df44BMpeGOdGUV/TfyHWsS
# tm0IGO/nBbvYMLR+hxjJf8E2XbXbRoYmZZO1E32eHl/AU1ylUZ8yzocEllw5lHig
# s0f1lgTSga6BR8aaRc3rEIUFPUtRTVtncubUHEYaAnIVFnU3YOq8wN/8YH0blh3/
# BBpSgW1ByIZZ5nJK8G8k2yAK+8MkgsGp+Opq5EYL0/R1rv0VM0pVPEhGEAwKnLZj
# 5aJ6fjRq0lFolnz+m3lHP//S4Lu+s3NrRj1BUYclEKkNCj2LpUgjcvp4B9gw9oy1
# O2Iji42cSaXI2U5OS4PHsY3nomm663LyfRqEr6KfzMhC/sXMZINU+QfWExw1sGPn
# kDc2qCtUDYh3NtySYAOQlzVr8RjruxW5z91I85DAd0P70fHfP+RrAi/KxptCMuxw
# KHYVzX1DipkP42NUEgvvUThzlkQ1yX0WkOHph8PY9BVvni6QtET+ZYYN0pAqVp89
# OZINIuAgRie6tw/tFhCU8AOWgidjWsaxlUhVQ8B48P2rcJL/4zlm1x+9OGqhgg48
# 9w0BCQQxIgQgGLlbFsVdhuXuMotbf+NkjW7IVEdX7WTMcFCAXDiBTcYwDQYJKoZI
# hvcNAQEBBQAEggIAGCROL07OfZ00X4+aD9myGgUL+My8yJteh76cI0ECth19gxgF
# d+b9u8Wfagx9rs63CEJWZvoabdKt3kjQWccjhco1/gjFV/FG6vR7NQenEjt9nvVf
# H8SNYrTKsnXQbWY2oVgfRhaWXOHFZC1Lb+V/ixqE13UuxdVhkLrksfF+InEVdG4k
# N5yH67z5vcXe4OIGVdOAA0Fm9arUVLGbbQVETLugsMVqzwCH4whwyBqf6AsDry3P
# suB3xMGvow25uqJeL6NkZv+t6UScpqfe0lDjUMicMampXRC/KBM0ISUso+sV5wFQ
# 6Vj5ndq3Uorv5V6HaOaSJiQG9nTzdlphXAAsVAbK5UfSBEOnF70fZQJs77y9eSe3
# wBJalz7G7HVZ03Tm8e4HR5+Z5XpYT6wWNQbq46ztJn10ypGnReMnTGiA5J+mT5Ji
# HBHUYkIQAi3kEf3U/GXkq9lliexVZdisDAEX471nyff3iyw08ieZAFUgPsKd/lBY
# 0cyotndhtaRN39GPMLWenFoiXW8datVk9Dco1eDU8YUO8hOAoV8BJ+XwL7hqk+m3
# 3uebSME1F/CIyocqUJB9AcUADXN+gsG1w9w/vo8HM0FXbiEhUen/S8JhGvYijSAH
# nFEgn0kK2a0bvPN+Yrttzd/mJRgC/lvR+0K35/izie8bp0HSxkAj2UWgb4ihgg48
# MIIOOAYKKwYBBAGCNwMDATGCDigwgg4kBgkqhkiG9w0BBwKggg4VMIIOEQIBAzEN
# MAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgB
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCB5varetq4DXxr3orpjYw9yNbT+8dCI
# lsRulIg7hS3LcAIUSZcd0dzMQlAfkNLSRu+bC2FCzYkYDzIwMjMwNTI0MjMwNzIw
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCCR48Y7/BdjE4WMJ3MTfFvvKHO/MTEE
# pmvjIcKiDXqFggIUUKVLvq/Rere22pEN7bPPypbSx4kYDzIwMjQwNTMwMTIxNTU3
# WjADAgEeoIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMg
# Q29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAv
# BgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOg
@@ -1231,13 +1258,13 @@ exit $ExitCode
# A1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRy
# dXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBp
# bmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjMwNTI0MjMwNzIw
# WjAvBgkqhkiG9w0BCQQxIgQgRCSkHvAc4uSMibqa+W8FDHam+RFDzx5CELhE920l
# swAwNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAKfsa67MZHNZqGR726b4wQgBaWll
# 9wSz9koTP6yL+vbqSxdLEdUdksE+mmFeS5p2ybzTk8eIQT/PzwWg81U4SqWR2v0m
# Ou8zLJ/CqR868FggGj0A50b+0Kk+L8dzTRDFQSP/BazOfx6F9xkyBZW6uyus00hv
# pWH+wxWc7Ki3wHTFh/jxhL+oLEteLrXZQRS+nEP2QD7qITUGdj6Qq2JfVpVv8I4U
# HhRY/eADly8Y0wEROi3UWqlxWb2yZnOK/cYrz1mIGQ2PkRsz9vuUjQiHFdfp9zE0
# 0+PsZkKFY2hZAcYv6pp9LTQBMG1th5jhOca9c1fFYzu1X52y0Iuw/zU345c=
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwNTMwMTIxNTU3
# WjAvBgkqhkiG9w0BCQQxIgQgfg9VtUU2OnGoPQzBzGTbTgCT1w6jp7BxXaoKjZml
# N6owNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAKiMf+Bo+QGtVkZBMEwMnI59Codn
# /T20P0U9weTi03tqkmrxLsk4lyFEbXvcFvnjNfVZhJKUP/BQjVQMXwbJRiRGOkwB
# jij+VjChUZg4P1E2cIhJWwh48DR26/21xKQoU2IqsFgjZ4STFuR7b/ccJ07EQN8Z
# Fgd9Ig+Ie2YdHkW4zXKFfQlNOwIyxdrfV8JIurWdaR3rXeh/lrnbBBYaxuX0O9+N
# hgbgQomjY+YJWnli0UJAHSJjErhMFuaSAKgezbixoINfPYMhbjotimdNl4GMj2yw
# 9AV+b99mhk6piJwIDuY0GYr4IaCIju46HzgtUDVgNPG3oJrWrFLCRNZuk7E=
# SIG # End signature block