Compare commits

...

5 Commits
v1.52 ... v1.57

Author SHA1 Message Date
Pete Batard
f55fd2932c Switch back to using 'Invoke-WebRequest' instead of 'curl'
* Closes #91.
2024-06-18 12:08:48 +01:00
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

View File

@@ -1,6 +1,6 @@
#
# Fido v1.52 - Feature ISO Downloader, for retail Windows images and UEFI Shell
# Copyright © 2019-2023 Pete Batard <pete@akeo.ie>
# Fido v1.57 - 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
#
@@ -138,9 +138,9 @@ $WindowsVersions = @(
@(
@("Windows 11", "windows11"),
@(
"23H2 (Build 22621.2428 - 2023.10)",
@("Windows 11 Home/Pro/Edu", 2860),
@("Windows 11 Home China ", ($zh + 2861))
"23H2 v2 (Build 22631.2861 - 2023.12)",
@("Windows 11 Home/Pro/Edu", 2935),
@("Windows 11 Home China ", ($zh + 2936))
)
),
@(
@@ -164,6 +164,16 @@ $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),
@@ -432,6 +442,7 @@ function Get-RandomDate()
#region Globals
$ErrorActionPreference = "Stop"
$DefaultTimeout = 30
$dh = 58
$Stage = 0
$SelectedIndex = 0
@@ -503,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?"
Invoke-WebRequest -UseBasicParsing -TimeoutSec $DefaultTimeout -MaximumRedirection 0 $url | Out-Null
Invoke-WebRequest -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"
}
}
@@ -559,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
Invoke-WebRequest -UseBasicParsing -TimeoutSec $DefaultTimeout -MaximumRedirection 0 -UserAgent $UserAgent $url | Out-Null
} catch {
Error($_.Exception.Message)
return @()
@@ -578,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 = Invoke-WebRequest -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"
}
@@ -668,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 = Invoke-WebRequest -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)
@@ -721,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 = (Invoke-WebRequest -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)..."
@@ -1054,8 +1075,8 @@ exit $ExitCode
# SIG # Begin signature block
# MIIkWAYJKoZIhvcNAQcCoIIkSTCCJEUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCftVZFSq3Sn8jD
# giSFz/kueIck3YT/byvAzDnin6clLKCCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB6/hZgyGy5PCvt
# gCtQT/nZSZCBsJLelhii59nr9meeYqCCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
@@ -1158,22 +1179,22 @@ exit $ExitCode
# aWMgQ29kZSBTaWduaW5nIENBIEVWIFIzNgIRAL+xUAG79ZLUlip3l+pzb6MwDQYJ
# YIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK
# KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG
# 9w0BCQQxIgQgqAvJCkeR58H5ULoUr8/SYbJ1aK86hAoK4YORM173AT4wDQYJKoZI
# hvcNAQEBBQAEggIAR2b7jIymOLmGaEtgDNFjP+T/AwQTlsyc8zblIlkwMfDL8rc1
# prPdCIKewiugfZn4+RIruOnx4J2knl+ufRBUi9B8wSiT681s/oVWSKlX0TOH0CA4
# LK9EKy/vj15xqKhoHn2PgOi/WQl8C8ZWBXC5mRfBzFUNGJj+6TW6P6CU2i1gJA5O
# VBefeXwd2kxUrOzp6irvEQnMAQ02EK6neZNybii+ymGjynV4NTO9BNWqzUDe+UL6
# cSMPOJNLCWwn9QTd/ibxcGJK3MBoAdCzxmBHHOdS4euWZzkXVSdeeRxQvUu37EnW
# zwVmQuKXQaVx0Rgg+7Z70PN5gb3+oL2fj+p6QIxD0WUzfbupI/B+LVLrN41Zk/JQ
# q/u1jn/6CbAFwcnAcBaDROtUo201+uUe4EeKXQoaueioMhURA4GkE4xqayLJlGvJ
# 8sG5X/Jdi44ksEPQqQaMaaS8auB4YpUqZayXysdUZyxfh7mMvhbHu/Wk8rfB6L8q
# tkp/ozl1tVXe46r0UJWX+fVv3Sl6fzVOt5jhnrRvpxla5dX9Fr7LvhyEizAKNTUz
# ZXHZcrzsFCR5pC6pTYJScQIYYIbXSHuD+RGqdlAtX1HoCFYoa4uh8tsKmXFELuLN
# 67wuX3T/2sgsSnMxFCxDFLZKB030D9FkePEPKT5DVyDMx+79s2FhCkESzVehgg48
# 9w0BCQQxIgQgjGvMX1KUGmTAG0n1x4MezO453CpVTtVYSdFxGu+1e6MwDQYJKoZI
# hvcNAQEBBQAEggIALNCfDs1MxfpLMhXG2grYBt5l4UBrnaQ04a5lZHAUU1X7BmwS
# gr21XmYKQRq82gwawyhq/ZRDpb4ba2Z7IQN7IRH0IBgZVwUeBE9ZEyYGQehLdF1Y
# Q7F2rPODSEdrneR00+KTwN1+DSTNX213LRwjwV0f5Ieu5Bd4CelFpApkxkYcuybM
# JSzkXnQOFm06ArNrwTKmlDXvLBKtgUyxsL3oT9xASqBGJx6i/SBbzKjyqD7+aVzq
# COXgJCxAO5Wx2DHK+DUfvDfQy/NQ69icRm2AoMTxPI/by8sUbzYTK3dw/wCEQWnJ
# ijVxnyUE98OsYejFtCxmpJzq3ST9+TTMXjHQyqztnxTIlGGGVw9aPqK9FHYpclgj
# HeT9LWreOdkA4VCdxKYhh0vG7RKPyQzZLSC1BRY4Y8iLWupDPTEfP8LZeE0XeLaO
# McSggDRzz+AKbraqn9LWRF4MRAW3V4Aa8tT1LPm4fT1N2mt7r9aNyYcaqMWs5/TR
# 9vohkS8lbV5+QX5cDC8n1VborV9QzLM/mPXK/4PSoVuRLVHkZ9FLMRpEf/pBJ7nY
# HhXeS2HZ1CAp0xGqj6CUtu0+808D0u07HA4ic4WOdzSfVvgYyCJ4BXg0xVoHR0tf
# ox7Xa1FVa0hq7q6i4+tHC8AQl1LDodec1qrrL1ULEK8kU+x9JZuwm/OqIU2hgg48
# MIIOOAYKKwYBBAGCNwMDATGCDigwgg4kBgkqhkiG9w0BBwKggg4VMIIOEQIBAzEN
# MAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgB
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCCQI0Sgxq1/qs4jdaGtHt+hlbWbiP/t
# ifwFA89J3gWtuwIUOq97N3H4EpkdBOL2+dkd23u5HYYYDzIwMjMxMDMxMTgxNzQx
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCCpTBNKrwFwdHYx5MKSLOIsjhyUcRDn
# ors0b8ClDUtZzwIUGHuZJSxXXydSQjJMKzqMARfqbXIYDzIwMjQwNjE4MTEwNzQ1
# WjADAgEeoIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMg
# Q29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAv
# BgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOg
@@ -1237,13 +1258,13 @@ exit $ExitCode
# A1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRy
# dXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBp
# bmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjMxMDMxMTgxNzQx
# WjAvBgkqhkiG9w0BCQQxIgQgN8MirsZRtx0Hag939umh2bFUS+X8+SB8KcJ4DCtA
# b0IwNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAJ4k1y9jwC4JhtZwvqaOp8MbLuyx
# LAFYztqX5YMtx/f1JxuH3hGMMoiKT72YgJI5pSrJYCuy0+biyHtLxBJtl3k/ZlTr
# lAkuhkmqcNvujDkygvLtIW4w1EwFlrPtqSvaWfR2+/VL7BjNQ4nwukLc1u+/6Owh
# hlvT8LIpvDZAnb532pQ9EtJXpCxWsWiv50ESiGxTNNZ0trsHPe06q9VSBG9ast8o
# 7wWIlTeF3VWSclONzbfp6gkr6Bpo0NsBMo3GZ0Ub4jrseLR1l6QPcLqpejeB+vBv
# lR7zXf1n1AZhw4Bo5lWz7KCoVGOILgX38EU/wLzko5PJna8wZ4KZjiF3d4E=
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwNjE4MTEwNzQ1
# WjAvBgkqhkiG9w0BCQQxIgQgaLj4rStyAc4gYIJwBDnf1sEWzST3OsOyweYfm5EZ
# XRswNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAIeZ3ykedA8RCnxesyKjJCB1j97D
# 4CzvrQzrWlYg+D/A/4QuYXiCirn0q2ONq61EmH6c/zqC4vRwsGfVGFkQqb9GeC0e
# JAxqubqBcqdN3aTGdjEkv7BQmxi3OLjcTgS0nsQrkPQD46YOX2Mtx2pt8LqsRKyi
# bhhN6WG40hrUnOQFts6pcL6PhFSth7xMh6h/LW9x20R2HBpzvRi8xmK80H7NPH4v
# optllo3Cu6xzp1RSDcsbaCx7YopMjIJbqIQf11YMvE52beHFZnZPz1tTPZaNqzvb
# Ln1K6LDZP6Zpw9OUvDR2UIRCBCLkw/CYWFx75OpbQgNBoDnZKsdjj1x5WgI=
# SIG # End signature block