mirror of
https://github.com/pbatard/Fido.git
synced 2025-09-16 14:18:02 +02:00
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f55fd2932c | ||
![]() |
06a14ba11c | ||
![]() |
4e6f25f351 |
80
Fido.ps1
80
Fido.ps1
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Fido v1.54 - 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
|
||||
#
|
||||
@@ -164,6 +164,11 @@ $WindowsVersions = @(
|
||||
),
|
||||
@(
|
||||
@("UEFI Shell 2.2", "UEFI_SHELL 2.2"),
|
||||
@(
|
||||
"24H1 (edk2-stable202405)",
|
||||
@("Release", 0),
|
||||
@("Debug", 1)
|
||||
),
|
||||
@(
|
||||
"23H2 (edk2-stable202311)",
|
||||
@("Release", 0),
|
||||
@@ -437,6 +442,7 @@ function Get-RandomDate()
|
||||
|
||||
#region Globals
|
||||
$ErrorActionPreference = "Stop"
|
||||
$DefaultTimeout = 30
|
||||
$dh = 58
|
||||
$Stage = 0
|
||||
$SelectedIndex = 0
|
||||
@@ -508,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"
|
||||
}
|
||||
}
|
||||
@@ -564,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 @()
|
||||
@@ -583,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"
|
||||
}
|
||||
@@ -673,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)
|
||||
@@ -726,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)..."
|
||||
@@ -1059,8 +1075,8 @@ exit $ExitCode
|
||||
# SIG # Begin signature block
|
||||
# MIIkWAYJKoZIhvcNAQcCoIIkSTCCJEUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
|
||||
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
|
||||
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB3CIxxVBpyap6s
|
||||
# WzEDj8dyJ/82xI3cuRQ7wUuMgmNSH6CCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
|
||||
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB6/hZgyGy5PCvt
|
||||
# gCtQT/nZSZCBsJLelhii59nr9meeYqCCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
|
||||
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
|
||||
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
|
||||
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
|
||||
@@ -1163,22 +1179,22 @@ exit $ExitCode
|
||||
# aWMgQ29kZSBTaWduaW5nIENBIEVWIFIzNgIRAL+xUAG79ZLUlip3l+pzb6MwDQYJ
|
||||
# YIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK
|
||||
# KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG
|
||||
# 9w0BCQQxIgQgB/4Ei492KvZNJ+KzXknr/y/qiaEcmqfqngje7qBFVNcwDQYJKoZI
|
||||
# hvcNAQEBBQAEggIAaYBaMJLtX+vLgJLGIF33ZEcDfamDxiSBPyf3WDXvYy0wv8aZ
|
||||
# NsP6hQ7RAbEnL7PEinEn4Dn7qlxPb3F4Xhaby7CGf73JPe2ISIife0EuaF8id+7D
|
||||
# SYybgi2ksCtnjHdrYa+1U4IzkUkM2WI2CVDOQQB2oQ/GCGDjlNB/7yz9K5t5M5A8
|
||||
# YnlvgutAcpW+Dgl1UgANVkMEQoKTw3NjCawqlKn3yhOmlr652lFm1GeKX3kmfoFK
|
||||
# zXqO+86BrDfI48YQ7FNN9xot7Rh/iA9UlBWg7Lk6aMY3wBnx9X9qo1zIhze3iKaK
|
||||
# X4bglOvz75vCO74Zx4altAjZa8Mmdit3APEeO3tjesUlK0++hxFRnEStvIEAZp5w
|
||||
# u4QYbbT0/0U40guCPiFkZ+xriYsne9Em9OxPQocQgcrsPOmtJJqioBlQiAsCjxhS
|
||||
# /udWLfjgFjfNtCGecVP0RJOZhIDNRqL1RDF3F/dgmvytucL3dPVJcDlZ/06AiUyv
|
||||
# Qp5RWWzZyhmQL5/rKdtEEfjU1rhAlYSgvdZA72K8rSbMGFYQoPJ+FaMOnELoaWqw
|
||||
# WTnffBYUWuOGNG0lnUnuwsjHA9thoVWcLwFD3fWxaYxGOLLeDBsaej8seO/y37JZ
|
||||
# vQSehyugNEfhHgc1SJ4ePhKOGnAi/vfeuju53NmhauyQ6cdMVJ1crtZzTxqhgg48
|
||||
# 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
|
||||
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCBmH5jmhEUTykwsNoIQHvzVLsoSug4/
|
||||
# /PKG8KqwNX2aPgIUeFiHVPRsSuwvfG2Rpx8uM0YTlXoYDzIwMjMxMjE5MTAyNTMw
|
||||
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCCpTBNKrwFwdHYx5MKSLOIsjhyUcRDn
|
||||
# ors0b8ClDUtZzwIUGHuZJSxXXydSQjJMKzqMARfqbXIYDzIwMjQwNjE4MTEwNzQ1
|
||||
# WjADAgEeoIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMg
|
||||
# Q29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAv
|
||||
# BgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOg
|
||||
@@ -1242,13 +1258,13 @@ exit $ExitCode
|
||||
# A1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRy
|
||||
# dXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBp
|
||||
# bmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3
|
||||
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjMxMjE5MTAyNTMw
|
||||
# WjAvBgkqhkiG9w0BCQQxIgQgr8qkThEQyfc/TFbqzeugLdTCHydGTpXEr7fP6ipS
|
||||
# HnowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
|
||||
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAG6MAlweb7zBtHDB7lQr40EYUdVp
|
||||
# cp5Kxww5OhYdWvP9qD+jEjXIbu3oEcsJzeymCy1PFPWgrRfosBh/qOrrDfLtYu7r
|
||||
# zl6Ru1czZnQP8AS3S2Hg38b2o1ZLWIS6thQnQcXJIzCbcnkRV3FHzn/k3RMV8jwf
|
||||
# ow7cLHUy2L2qdyFUfUnJFgpfBa/2a8b4jelXbuH5Ld0DI/uAz5gsmhokLbXlNLRp
|
||||
# 9o3d6n1WDRbDAXzsALdUR5RjCH/ED2ryEmMgHgp+tjtBF6zS6W91gPpOn+1wxH2t
|
||||
# 5OBjZLBX4+QBJaBskR8KfTIGqftfXno41hUtLmu9aTSZ6lDqo1xXstYQK30=
|
||||
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwNjE4MTEwNzQ1
|
||||
# WjAvBgkqhkiG9w0BCQQxIgQgaLj4rStyAc4gYIJwBDnf1sEWzST3OsOyweYfm5EZ
|
||||
# XRswNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
|
||||
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAIeZ3ykedA8RCnxesyKjJCB1j97D
|
||||
# 4CzvrQzrWlYg+D/A/4QuYXiCirn0q2ONq61EmH6c/zqC4vRwsGfVGFkQqb9GeC0e
|
||||
# JAxqubqBcqdN3aTGdjEkv7BQmxi3OLjcTgS0nsQrkPQD46YOX2Mtx2pt8LqsRKyi
|
||||
# bhhN6WG40hrUnOQFts6pcL6PhFSth7xMh6h/LW9x20R2HBpzvRi8xmK80H7NPH4v
|
||||
# optllo3Cu6xzp1RSDcsbaCx7YopMjIJbqIQf11YMvE52beHFZnZPz1tTPZaNqzvb
|
||||
# Ln1K6LDZP6Zpw9OUvDR2UIRCBCLkw/CYWFx75OpbQgNBoDnZKsdjj1x5WgI=
|
||||
# SIG # End signature block
|
||||
|
Reference in New Issue
Block a user