mirror of
https://github.com/pbatard/Fido.git
synced 2025-09-16 22:28:02 +02:00
Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
06a14ba11c | ||
![]() |
4e6f25f351 | ||
![]() |
d43d7aeee3 | ||
![]() |
d8b2d24242 |
91
Fido.ps1
91
Fido.ps1
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Fido v1.52 - Feature ISO Downloader, for retail Windows images and UEFI Shell
|
# Fido v1.56 - Feature ISO Downloader, for retail Windows images and UEFI Shell
|
||||||
# Copyright © 2019-2023 Pete Batard <pete@akeo.ie>
|
# Copyright © 2019-2024 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
|
||||||
#
|
#
|
||||||
@@ -138,9 +138,9 @@ $WindowsVersions = @(
|
|||||||
@(
|
@(
|
||||||
@("Windows 11", "windows11"),
|
@("Windows 11", "windows11"),
|
||||||
@(
|
@(
|
||||||
"23H2 (Build 22621.2428 - 2023.10)",
|
"23H2 v2 (Build 22631.2861 - 2023.12)",
|
||||||
@("Windows 11 Home/Pro/Edu", 2860),
|
@("Windows 11 Home/Pro/Edu", 2935),
|
||||||
@("Windows 11 Home China ", ($zh + 2861))
|
@("Windows 11 Home China ", ($zh + 2936))
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
@(
|
@(
|
||||||
@@ -164,6 +164,16 @@ $WindowsVersions = @(
|
|||||||
),
|
),
|
||||||
@(
|
@(
|
||||||
@("UEFI Shell 2.2", "UEFI_SHELL 2.2"),
|
@("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)",
|
"23H1 (edk2-stable202305)",
|
||||||
@("Release", 0),
|
@("Release", 0),
|
||||||
@@ -432,6 +442,7 @@ function Get-RandomDate()
|
|||||||
|
|
||||||
#region Globals
|
#region Globals
|
||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
|
$DefaultTimeout = 30
|
||||||
$dh = 58
|
$dh = 58
|
||||||
$Stage = 0
|
$Stage = 0
|
||||||
$SelectedIndex = 0
|
$SelectedIndex = 0
|
||||||
@@ -503,8 +514,18 @@ function Check-Locale
|
|||||||
if ($Verbosity -ge 2) {
|
if ($Verbosity -ge 2) {
|
||||||
Write-Host Querying $url
|
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 {
|
} 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"
|
$script:QueryLocale = "en-US"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -559,7 +580,7 @@ function Get-Windows-Languages([int]$SelectedVersion, [int]$SelectedEdition)
|
|||||||
Write-Host Querying $url
|
Write-Host Querying $url
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Invoke-WebRequest -UseBasicParsing -MaximumRedirection 0 -UserAgent $UserAgent $url | Out-Null
|
curl -UseBasicParsing -TimeoutSec $DefaultTimeout -MaximumRedirection 0 -UserAgent $UserAgent $url | Out-Null
|
||||||
} catch {
|
} catch {
|
||||||
Error($_.Exception.Message)
|
Error($_.Exception.Message)
|
||||||
return @()
|
return @()
|
||||||
@@ -578,7 +599,7 @@ function Get-Windows-Languages([int]$SelectedVersion, [int]$SelectedEdition)
|
|||||||
|
|
||||||
$script:SelectedIndex = 0
|
$script:SelectedIndex = 0
|
||||||
try {
|
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") {
|
if ($r -match "errorModalMessage") {
|
||||||
Throw-Error -Req $r -Alt "Could not retrieve languages from server"
|
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
|
$Is64 = [Environment]::Is64BitOperatingSystem
|
||||||
# Must add a referer for this request, else Microsoft's servers will deny it
|
# Must add a referer for this request, else Microsoft's servers will deny it
|
||||||
$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 = curl -Method Post -Headers @{ "Referer" = $ref } -UseBasicParsing -TimeoutSec $DefaultTimeout -UserAgent $UserAgent -WebSession $Session $url
|
||||||
if ($r -match "errorModalMessage") {
|
if ($r -match "errorModalMessage") {
|
||||||
$Alt = [regex]::Match($r.Content, '<p id="errorModalMessage">(.+?)<\/p>').Groups[1].Value -replace "<[^>]+>" -replace "\s+", " " -replace "\?\?\?", "-"
|
$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)
|
$Alt = [System.Text.Encoding]::UTF8.GetString([byte[]][char[]]$Alt)
|
||||||
@@ -721,7 +742,7 @@ function Process-Download-Link([string]$Url)
|
|||||||
$pattern = '.*\/(.*\.iso).*'
|
$pattern = '.*\/(.*\.iso).*'
|
||||||
$File = [regex]::Match($Url, $pattern).Groups[1].Value
|
$File = [regex]::Match($Url, $pattern).Groups[1].Value
|
||||||
# PowerShell implicit conversions are iffy, so we need to force them...
|
# 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)
|
$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)..."
|
||||||
@@ -1054,8 +1075,8 @@ exit $ExitCode
|
|||||||
# SIG # Begin signature block
|
# SIG # Begin signature block
|
||||||
# MIIkWAYJKoZIhvcNAQcCoIIkSTCCJEUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
|
# MIIkWAYJKoZIhvcNAQcCoIIkSTCCJEUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
|
||||||
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
|
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
|
||||||
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCftVZFSq3Sn8jD
|
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCD+x1KfwoalW3t
|
||||||
# giSFz/kueIck3YT/byvAzDnin6clLKCCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
|
# +j1Qn14VTLu8yO8vHTqfh8WnOWfDH6CCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
|
||||||
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
|
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
|
||||||
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
|
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
|
||||||
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
|
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
|
||||||
@@ -1158,22 +1179,22 @@ exit $ExitCode
|
|||||||
# aWMgQ29kZSBTaWduaW5nIENBIEVWIFIzNgIRAL+xUAG79ZLUlip3l+pzb6MwDQYJ
|
# aWMgQ29kZSBTaWduaW5nIENBIEVWIFIzNgIRAL+xUAG79ZLUlip3l+pzb6MwDQYJ
|
||||||
# YIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK
|
# YIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK
|
||||||
# KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG
|
# KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG
|
||||||
# 9w0BCQQxIgQgqAvJCkeR58H5ULoUr8/SYbJ1aK86hAoK4YORM173AT4wDQYJKoZI
|
# 9w0BCQQxIgQgGLlbFsVdhuXuMotbf+NkjW7IVEdX7WTMcFCAXDiBTcYwDQYJKoZI
|
||||||
# hvcNAQEBBQAEggIAR2b7jIymOLmGaEtgDNFjP+T/AwQTlsyc8zblIlkwMfDL8rc1
|
# hvcNAQEBBQAEggIAGCROL07OfZ00X4+aD9myGgUL+My8yJteh76cI0ECth19gxgF
|
||||||
# prPdCIKewiugfZn4+RIruOnx4J2knl+ufRBUi9B8wSiT681s/oVWSKlX0TOH0CA4
|
# d+b9u8Wfagx9rs63CEJWZvoabdKt3kjQWccjhco1/gjFV/FG6vR7NQenEjt9nvVf
|
||||||
# LK9EKy/vj15xqKhoHn2PgOi/WQl8C8ZWBXC5mRfBzFUNGJj+6TW6P6CU2i1gJA5O
|
# H8SNYrTKsnXQbWY2oVgfRhaWXOHFZC1Lb+V/ixqE13UuxdVhkLrksfF+InEVdG4k
|
||||||
# VBefeXwd2kxUrOzp6irvEQnMAQ02EK6neZNybii+ymGjynV4NTO9BNWqzUDe+UL6
|
# N5yH67z5vcXe4OIGVdOAA0Fm9arUVLGbbQVETLugsMVqzwCH4whwyBqf6AsDry3P
|
||||||
# cSMPOJNLCWwn9QTd/ibxcGJK3MBoAdCzxmBHHOdS4euWZzkXVSdeeRxQvUu37EnW
|
# suB3xMGvow25uqJeL6NkZv+t6UScpqfe0lDjUMicMampXRC/KBM0ISUso+sV5wFQ
|
||||||
# zwVmQuKXQaVx0Rgg+7Z70PN5gb3+oL2fj+p6QIxD0WUzfbupI/B+LVLrN41Zk/JQ
|
# 6Vj5ndq3Uorv5V6HaOaSJiQG9nTzdlphXAAsVAbK5UfSBEOnF70fZQJs77y9eSe3
|
||||||
# q/u1jn/6CbAFwcnAcBaDROtUo201+uUe4EeKXQoaueioMhURA4GkE4xqayLJlGvJ
|
# wBJalz7G7HVZ03Tm8e4HR5+Z5XpYT6wWNQbq46ztJn10ypGnReMnTGiA5J+mT5Ji
|
||||||
# 8sG5X/Jdi44ksEPQqQaMaaS8auB4YpUqZayXysdUZyxfh7mMvhbHu/Wk8rfB6L8q
|
# HBHUYkIQAi3kEf3U/GXkq9lliexVZdisDAEX471nyff3iyw08ieZAFUgPsKd/lBY
|
||||||
# tkp/ozl1tVXe46r0UJWX+fVv3Sl6fzVOt5jhnrRvpxla5dX9Fr7LvhyEizAKNTUz
|
# 0cyotndhtaRN39GPMLWenFoiXW8datVk9Dco1eDU8YUO8hOAoV8BJ+XwL7hqk+m3
|
||||||
# ZXHZcrzsFCR5pC6pTYJScQIYYIbXSHuD+RGqdlAtX1HoCFYoa4uh8tsKmXFELuLN
|
# 3uebSME1F/CIyocqUJB9AcUADXN+gsG1w9w/vo8HM0FXbiEhUen/S8JhGvYijSAH
|
||||||
# 67wuX3T/2sgsSnMxFCxDFLZKB030D9FkePEPKT5DVyDMx+79s2FhCkESzVehgg48
|
# nFEgn0kK2a0bvPN+Yrttzd/mJRgC/lvR+0K35/izie8bp0HSxkAj2UWgb4ihgg48
|
||||||
# MIIOOAYKKwYBBAGCNwMDATGCDigwgg4kBgkqhkiG9w0BBwKggg4VMIIOEQIBAzEN
|
# MIIOOAYKKwYBBAGCNwMDATGCDigwgg4kBgkqhkiG9w0BBwKggg4VMIIOEQIBAzEN
|
||||||
# MAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgB
|
# MAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgB
|
||||||
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCCQI0Sgxq1/qs4jdaGtHt+hlbWbiP/t
|
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCCR48Y7/BdjE4WMJ3MTfFvvKHO/MTEE
|
||||||
# ifwFA89J3gWtuwIUOq97N3H4EpkdBOL2+dkd23u5HYYYDzIwMjMxMDMxMTgxNzQx
|
# pmvjIcKiDXqFggIUUKVLvq/Rere22pEN7bPPypbSx4kYDzIwMjQwNTMwMTIxNTU3
|
||||||
# WjADAgEeoIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMg
|
# WjADAgEeoIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMg
|
||||||
# Q29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAv
|
# Q29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAv
|
||||||
# BgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOg
|
# BgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOg
|
||||||
@@ -1237,13 +1258,13 @@ exit $ExitCode
|
|||||||
# A1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRy
|
# A1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRy
|
||||||
# dXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBp
|
# dXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBp
|
||||||
# bmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3
|
# bmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3
|
||||||
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjMxMDMxMTgxNzQx
|
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwNTMwMTIxNTU3
|
||||||
# WjAvBgkqhkiG9w0BCQQxIgQgN8MirsZRtx0Hag939umh2bFUS+X8+SB8KcJ4DCtA
|
# WjAvBgkqhkiG9w0BCQQxIgQgfg9VtUU2OnGoPQzBzGTbTgCT1w6jp7BxXaoKjZml
|
||||||
# b0IwNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
|
# N6owNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
|
||||||
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAJ4k1y9jwC4JhtZwvqaOp8MbLuyx
|
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAKiMf+Bo+QGtVkZBMEwMnI59Codn
|
||||||
# LAFYztqX5YMtx/f1JxuH3hGMMoiKT72YgJI5pSrJYCuy0+biyHtLxBJtl3k/ZlTr
|
# /T20P0U9weTi03tqkmrxLsk4lyFEbXvcFvnjNfVZhJKUP/BQjVQMXwbJRiRGOkwB
|
||||||
# lAkuhkmqcNvujDkygvLtIW4w1EwFlrPtqSvaWfR2+/VL7BjNQ4nwukLc1u+/6Owh
|
# jij+VjChUZg4P1E2cIhJWwh48DR26/21xKQoU2IqsFgjZ4STFuR7b/ccJ07EQN8Z
|
||||||
# hlvT8LIpvDZAnb532pQ9EtJXpCxWsWiv50ESiGxTNNZ0trsHPe06q9VSBG9ast8o
|
# Fgd9Ig+Ie2YdHkW4zXKFfQlNOwIyxdrfV8JIurWdaR3rXeh/lrnbBBYaxuX0O9+N
|
||||||
# 7wWIlTeF3VWSclONzbfp6gkr6Bpo0NsBMo3GZ0Ub4jrseLR1l6QPcLqpejeB+vBv
|
# hgbgQomjY+YJWnli0UJAHSJjErhMFuaSAKgezbixoINfPYMhbjotimdNl4GMj2yw
|
||||||
# lR7zXf1n1AZhw4Bo5lWz7KCoVGOILgX38EU/wLzko5PJna8wZ4KZjiF3d4E=
|
# 9AV+b99mhk6piJwIDuY0GYr4IaCIju46HzgtUDVgNPG3oJrWrFLCRNZuk7E=
|
||||||
# SIG # End signature block
|
# SIG # End signature block
|
||||||
|
Reference in New Issue
Block a user