mirror of
https://github.com/pbatard/Fido.git
synced 2025-09-16 22:28:02 +02:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4e6f25f351 | ||
![]() |
d43d7aeee3 | ||
![]() |
d8b2d24242 | ||
![]() |
903cae2f00 | ||
![]() |
5d4a4d7d14 | ||
![]() |
4a694421af |
90
Fido.ps1
90
Fido.ps1
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Fido v1.49 - Feature ISO Downloader, for retail Windows images and UEFI Shell
|
||||
# Fido v1.55 - Feature ISO Downloader, for retail Windows images and UEFI Shell
|
||||
# Copyright © 2019-2023 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,16 @@ $WindowsVersions = @(
|
||||
),
|
||||
@(
|
||||
@("UEFI Shell 2.2", "UEFI_SHELL 2.2"),
|
||||
@(
|
||||
"23H2 (edk2-stable202311)",
|
||||
@("Release", 0),
|
||||
@("Debug", 1)
|
||||
),
|
||||
@(
|
||||
"23H1 (edk2-stable202305)",
|
||||
@("Release", 0),
|
||||
@("Debug", 1)
|
||||
),
|
||||
@(
|
||||
"22H2 (edk2-stable202211)",
|
||||
@("Release", 0),
|
||||
@@ -426,6 +437,7 @@ function Get-RandomDate()
|
||||
|
||||
#region Globals
|
||||
$ErrorActionPreference = "Stop"
|
||||
$DefaultTimeout = 30
|
||||
$dh = 58
|
||||
$Stage = 0
|
||||
$SelectedIndex = 0
|
||||
@@ -497,8 +509,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 +575,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 +594,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 +684,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 +737,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 +1070,8 @@ exit $ExitCode
|
||||
# SIG # Begin signature block
|
||||
# MIIkWAYJKoZIhvcNAQcCoIIkSTCCJEUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
|
||||
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
|
||||
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDs/90zfCBKVjL6
|
||||
# NsWYvK3K9j/kIecureg1h1y07zjzR6CCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
|
||||
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBHf44+d5nlaax1
|
||||
# zDK20N+s1BjbUkc/aTGHLUQuXBU9BqCCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
|
||||
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
|
||||
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
|
||||
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
|
||||
@@ -1152,22 +1174,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
|
||||
# 9w0BCQQxIgQgqqe1F1mEJpX4dnl4MXR5prBRZLQto2sBRVwggJo/MmswDQYJKoZI
|
||||
# hvcNAQEBBQAEggIAIV2/sxOW2vNsi2RIR5heiBkJXL9Cr3JkCA8XFvLfKwXe/ut9
|
||||
# mROkV8+DB5mDf3jngzXMtI07yx+hMuA/Lu9cJe2/DTBy4KQI8GC0JSVALVYrm2NU
|
||||
# XclHamxx7ab2MLtxX6tSB3fR1LY14oclKNMgdBu6sWF9vmTS5O/T3qEihKjtAdNZ
|
||||
# qRTwgVvQHvK8YKN58uK7Vbu32Pd0j2Eik4oxmc70MXxFmCjIBB8ncdqCQFXG1Yb1
|
||||
# VO7zHeRa+Y0MRjQEa8KsPR9uD1luklRD6vg4iknGGmlc+Nmly44EeBpK7sRepF+e
|
||||
# i+kLEzw7IekZOUzLKJCjucWjS1NpJwAobz3aGqQBQ1UB0P8T3ewCx2XX54T8moqJ
|
||||
# AfVM+ZqQV7X6FPBv6CrXD4wnRBIQ5dl6d0tzdFn2L5khY1HUEPGYpN/2l6BWtXjX
|
||||
# 0oi5ekkrRWwlRN4l3fY7fNfFoNet5RYjaGQ/i+w8pBaP2K5ww+VTm9nGSfl20DVp
|
||||
# WFjT+tV758SPgC+fmLBmYd1FCIPZpY4OMSMa18d6lItom3t940LzSEprtiMy+36f
|
||||
# 6SZ2PxYWX1FeEH4lFoMEDwZnq+eyOEgzwYBYORaJBLp7kMByLl8llFZehQEN1LAt
|
||||
# ej05ISFVCVTXdor6r+gehODD2vtAQzITU6wXHoV7Lql73bpb+InUDRQMIvmhgg48
|
||||
# MIIOOAYKKwYBBAGCNwMDATGCDigwgg4kBgkqhkiG9w0BBwKggg4VMIIOEQIBAzEN
|
||||
# MAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgB
|
||||
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCB5varetq4DXxr3orpjYw9yNbT+8dCI
|
||||
# lsRulIg7hS3LcAIUSZcd0dzMQlAfkNLSRu+bC2FCzYkYDzIwMjMwNTI0MjMwNzIw
|
||||
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCAvatjeRykuVBr5SLwlvgA58YXzCwoH
|
||||
# 9wFdhHo4uzpN1wIUPApJ6noKhPzZkCXyFW/KtK7iM8oYDzIwMjQwMjA3MTU1NDAy
|
||||
# WjADAgEeoIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMg
|
||||
# Q29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAv
|
||||
# BgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOg
|
||||
@@ -1231,13 +1253,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=
|
||||
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwMjA3MTU1NDAy
|
||||
# WjAvBgkqhkiG9w0BCQQxIgQg570COHsaZPS9rjX6BejuZj8Sq+pKr21RdiXdWz3K
|
||||
# O1MwNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
|
||||
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAInhOfqTOXDdnHraAsocyn30sofK
|
||||
# m/jHs++YFntM7KV18KMzYmuDtWJlZf98q2LqryJ/4Lq9rwbR+F83GprDYWD7LnpW
|
||||
# XI/GdSxdUDIO4BDQp6ckAbQ3uzh6DxtlsW9CCMIHdJpPpY5pjeI0Gv4YyGFPDgY+
|
||||
# QC4d/95+yC3pUOqxMdeK5O0IHuHOF0iER+52doaqbnAPaA6s0UD1jkJKVk7SXej5
|
||||
# YXa+0hI0Oseu6j1yaqkoFSV24uecmEh+xnfRvVM7dlltGsVJ5L1xLx396/7LW9Wr
|
||||
# J8HxJBxc775T9RcpIMTzxPkrRfngY0e7+D13hVLyfmYNkC0OxuekJ7f16O8=
|
||||
# SIG # End signature block
|
||||
|
Reference in New Issue
Block a user