mirror of
https://github.com/pbatard/Fido.git
synced 2025-09-16 22:28:02 +02:00
Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
e293e97bac | ||
![]() |
b1eebac8dc | ||
![]() |
8508ac6164 | ||
![]() |
eac06c958f |
112
Fido.ps1
112
Fido.ps1
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Fido v1.23 - Retail Windows ISO Downloader
|
# Fido v1.26 - Feature ISO Downloader, for retail Windows images and UEFI Shell
|
||||||
# Copyright © 2019-2021 Pete Batard <pete@akeo.ie>
|
# Copyright © 2019-2021 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
|
||||||
@@ -95,6 +95,14 @@ if (!$Cmd) {
|
|||||||
$zh = 0x10000
|
$zh = 0x10000
|
||||||
$ko = 0x20000
|
$ko = 0x20000
|
||||||
$WindowsVersions = @(
|
$WindowsVersions = @(
|
||||||
|
@(
|
||||||
|
@("Windows 11", "windows11"),
|
||||||
|
@(
|
||||||
|
"21H2 (Build 22000.194 - 2021.10)",
|
||||||
|
@("Windows 11 Home/Pro", 2069),
|
||||||
|
@("Windows 11 Home China ", ($zh + 2070))
|
||||||
|
)
|
||||||
|
),
|
||||||
@(
|
@(
|
||||||
@("Windows 10", "Windows10ISO"),
|
@("Windows 10", "Windows10ISO"),
|
||||||
@(
|
@(
|
||||||
@@ -139,6 +147,12 @@ $WindowsVersions = @(
|
|||||||
@("Windows 10 Education", 1216),
|
@("Windows 10 Education", 1216),
|
||||||
@("Windows 10 Home China ", ($zh + 1215))
|
@("Windows 10 Home China ", ($zh + 1215))
|
||||||
),
|
),
|
||||||
|
@(
|
||||||
|
"1809 R3 (Build 17763.379 - 2019.03)",
|
||||||
|
@("Windows 10 Home/Pro", 1203),
|
||||||
|
@("Windows 10 Education", 1202),
|
||||||
|
@("Windows 10 Home China ", ($zh + 1204))
|
||||||
|
),
|
||||||
@(
|
@(
|
||||||
"1809 R2 (Build 17763.107 - 2018.10)",
|
"1809 R2 (Build 17763.107 - 2018.10)",
|
||||||
@("Windows 10 Home/Pro", 1060),
|
@("Windows 10 Home/Pro", 1060),
|
||||||
@@ -248,7 +262,12 @@ $WindowsVersions = @(
|
|||||||
)
|
)
|
||||||
),
|
),
|
||||||
@(
|
@(
|
||||||
@("UEFI Shell v2", "UEFI_SHELL"),
|
@("UEFI Shell 2.2", "UEFI_SHELL 2.2"),
|
||||||
|
@(
|
||||||
|
"21H2 (edk2-stable202108)",
|
||||||
|
@("Release", 0),
|
||||||
|
@("Debug", 1)
|
||||||
|
),
|
||||||
@(
|
@(
|
||||||
"21H1 (edk2-stable202105)",
|
"21H1 (edk2-stable202105)",
|
||||||
@("Release", 0),
|
@("Release", 0),
|
||||||
@@ -259,6 +278,13 @@ $WindowsVersions = @(
|
|||||||
@("Release", 0),
|
@("Release", 0),
|
||||||
@("Debug", 1)
|
@("Debug", 1)
|
||||||
)
|
)
|
||||||
|
),
|
||||||
|
@(
|
||||||
|
@("UEFI Shell 2.0", "UEFI_SHELL 2.0"),
|
||||||
|
@(
|
||||||
|
"4.632 [20100426]",
|
||||||
|
@("Release", 0)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -648,7 +674,7 @@ function Get-Windows-Languages([int]$SelectedVersion, [int]$SelectedEdition)
|
|||||||
}
|
}
|
||||||
$i++
|
$i++
|
||||||
}
|
}
|
||||||
} elseif ($WindowsVersions[$SelectedVersion][0][1] -eq "UEFI_SHELL") {
|
} elseif ($WindowsVersions[$SelectedVersion][0][1].StartsWith("UEFI_SHELL")) {
|
||||||
$languages += @(New-Object PsObject -Property @{ DisplayLanguage = "English (US)"; Language = "en-us"; Id = 0 })
|
$languages += @(New-Object PsObject -Property @{ DisplayLanguage = "English (US)"; Language = "en-us"; Id = 0 })
|
||||||
} else {
|
} else {
|
||||||
$url = "https://www.microsoft.com/" + $QueryLocale + "/api/controls/contentinclude/html"
|
$url = "https://www.microsoft.com/" + $QueryLocale + "/api/controls/contentinclude/html"
|
||||||
@@ -704,16 +730,35 @@ function Get-Windows-Download-Links([int]$SelectedVersion, [int]$SelectedRelease
|
|||||||
foreach ($Version in $Windows7Versions[$SelectedEdition][$SkuId][2]) {
|
foreach ($Version in $Windows7Versions[$SelectedEdition][$SkuId][2]) {
|
||||||
$links += @(New-Object PsObject -Property @{ Type = $Version[0]; Link = $Version[1] })
|
$links += @(New-Object PsObject -Property @{ Type = $Version[0]; Link = $Version[1] })
|
||||||
}
|
}
|
||||||
} elseif ($WindowsVersions[$SelectedVersion][0][1] -eq "UEFI_SHELL") {
|
} elseif ($WindowsVersions[$SelectedVersion][0][1].StartsWith("UEFI_SHELL")) {
|
||||||
$tag = $WindowsVersions[$SelectedVersion][$SelectedRelease][0].SubString(0,4)
|
$tag = $WindowsVersions[$SelectedVersion][$SelectedRelease][0].Split(' ')[0]
|
||||||
$url = "https://github.com/pbatard/UEFI-Shell/releases/download/" + $tag + "/UEFI-Shell_" + $tag
|
$shell_version = $WindowsVersions[$SelectedVersion][0][1].Split(' ')[1]
|
||||||
|
$url = "https://github.com/pbatard/UEFI-Shell/releases/download/" + $tag
|
||||||
|
$link = $url + "/UEFI-Shell-" + $shell_version + "-" + $tag
|
||||||
if ($SelectedEdition -eq 0) {
|
if ($SelectedEdition -eq 0) {
|
||||||
$url += "_RELEASE.iso"
|
$link += "-RELEASE.iso"
|
||||||
} else {
|
} else {
|
||||||
$url += "_DEBUG.iso"
|
$link += "-DEBUG.iso"
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
# Read the supported archs from the release URL
|
||||||
|
$url += "/Version.xml"
|
||||||
|
$xml = New-Object System.Xml.XmlDocument
|
||||||
|
if ($Verbosity -ge 2) {
|
||||||
|
Write-Host Querying $url
|
||||||
|
}
|
||||||
|
$xml.Load($url)
|
||||||
|
$sep = ""
|
||||||
|
$archs = ""
|
||||||
|
foreach($arch in $xml.release.supported_archs.arch) {
|
||||||
|
$archs += $sep + $arch
|
||||||
|
$sep = ", "
|
||||||
|
}
|
||||||
|
$links += @(New-Object PsObject -Property @{ Type = $archs; Link = $link })
|
||||||
|
} catch {
|
||||||
|
Error($_.Exception.Message)
|
||||||
|
return @()
|
||||||
}
|
}
|
||||||
# TODO: Read the supported archs from the release (from an XML file or something)
|
|
||||||
$links += @(New-Object PsObject -Property @{ Type = "X64, IA32, AARCH64, ARM"; Link = $url })
|
|
||||||
} else {
|
} else {
|
||||||
$url = "https://www.microsoft.com/" + $QueryLocale + "/api/controls/contentinclude/html"
|
$url = "https://www.microsoft.com/" + $QueryLocale + "/api/controls/contentinclude/html"
|
||||||
$url += "?pageId=" + $RequestData["GetLinks"][0]
|
$url += "?pageId=" + $RequestData["GetLinks"][0]
|
||||||
@@ -778,7 +823,10 @@ function Process-Download-Link([string]$Url)
|
|||||||
if ($Cmd) {
|
if ($Cmd) {
|
||||||
$pattern = '.*\/(.*\.iso).*'
|
$pattern = '.*\/(.*\.iso).*'
|
||||||
$File = [regex]::Match($Url, $pattern).Groups[1].Value
|
$File = [regex]::Match($Url, $pattern).Groups[1].Value
|
||||||
$Size = Size-To-Human-Readable (Invoke-WebRequest -UseBasicParsing -Uri $Url -Method Head).Headers.'Content-Length'
|
# PowerShell implicit conversions are iffy, so we need to force them...
|
||||||
|
$str_size = (Invoke-WebRequest -UseBasicParsing -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)..."
|
Write-Host "Downloading '$File' ($Size)..."
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri $Url -OutFile $File
|
Invoke-WebRequest -UseBasicParsing -Uri $Url -OutFile $File
|
||||||
} else {
|
} else {
|
||||||
@@ -921,7 +969,7 @@ if ($Cmd) {
|
|||||||
if (!$Arch -and $Verbosity -ge 1) {
|
if (!$Arch -and $Verbosity -ge 1) {
|
||||||
Write-Host "No architecture specified (-Arch). Defaulting to '$($link.Type)'."
|
Write-Host "No architecture specified (-Arch). Defaulting to '$($link.Type)'."
|
||||||
}
|
}
|
||||||
$Selected += ", " + $link.Type
|
$Selected += ", [" + $link.Type + "]"
|
||||||
$winLink = $link
|
$winLink = $link
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1093,8 +1141,8 @@ exit $ExitCode
|
|||||||
# SIG # Begin signature block
|
# SIG # Begin signature block
|
||||||
# MIIcQgYJKoZIhvcNAQcCoIIcMzCCHC8CAQExDzANBglghkgBZQMEAgEFADB5Bgor
|
# MIIcQgYJKoZIhvcNAQcCoIIcMzCCHC8CAQExDzANBglghkgBZQMEAgEFADB5Bgor
|
||||||
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
|
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
|
||||||
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAU0UbnjQJMRkcW
|
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBVeU7bDzGt9CJn
|
||||||
# 9/SYEZb3CBUSWmQAyJcWC8Q647QEXaCCCy4wggVGMIIELqADAgECAhAkaSZj72wM
|
# Kdplh/v8BK9h0xj/RjVturFLFHg7CaCCCy4wggVGMIIELqADAgECAhAkaSZj72wM
|
||||||
# Cjsjz6MQw2SbMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNVBAYTAkdCMRswGQYDVQQI
|
# Cjsjz6MQw2SbMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNVBAYTAkdCMRswGQYDVQQI
|
||||||
# ExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoT
|
# ExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoT
|
||||||
# EUNPTU9ETyBDQSBMaW1pdGVkMSMwIQYDVQQDExpDT01PRE8gUlNBIENvZGUgU2ln
|
# EUNPTU9ETyBDQSBMaW1pdGVkMSMwIQYDVQQDExpDT01PRE8gUlNBIENvZGUgU2ln
|
||||||
@@ -1159,17 +1207,17 @@ exit $ExitCode
|
|||||||
# T01PRE8gQ0EgTGltaXRlZDEjMCEGA1UEAxMaQ09NT0RPIFJTQSBDb2RlIFNpZ25p
|
# T01PRE8gQ0EgTGltaXRlZDEjMCEGA1UEAxMaQ09NT0RPIFJTQSBDb2RlIFNpZ25p
|
||||||
# bmcgQ0ECECRpJmPvbAwKOyPPoxDDZJswDQYJYIZIAWUDBAIBBQCgfDAQBgorBgEE
|
# bmcgQ0ECECRpJmPvbAwKOyPPoxDDZJswDQYJYIZIAWUDBAIBBQCgfDAQBgorBgEE
|
||||||
# AYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3
|
# AYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3
|
||||||
# AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgJBgYMTvD/pIJ2ds3
|
# AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQghgbnP9aj+2uYl+dt
|
||||||
# kPJ6Yy1Qofs3TQ3VUw1Mi2soK9swDQYJKoZIhvcNAQEBBQAEggEAA5RNsTmrYt2w
|
# r4bNidYAaOfNCz4F65XJOxpYTtAwDQYJKoZIhvcNAQEBBQAEggEAg0NC2ERbjbTm
|
||||||
# iRt4jnqkBZ7YvSpPWeSutJgX1c3Tzwm8RTUJRMu8yu8b410cHAZ6jkrZ6oRJW+n2
|
# tTHqgEwUBGNP8fx3RoV2Uu7diEnQR/mbPxntyk3xjxEGdJdQTCWKSTzGZHgXvq+e
|
||||||
# tgzNCK4vbBDUgFbOYU5BEOpmDU1vuga17ary5rN3/AHOSE/TuHLt/a7Az6AHj9sG
|
# bcNpWiI4VVL3eHsw7KhCClibR6eTV3PfzXpmZFm5ist7kLmbExjqU1xwW5IBSs/9
|
||||||
# 28OJxM68ZAs5VBH1XFzpI9t9OWlIAFQ6vgPQhXUyu9/NTQ7WfMob7A2sVfTRTTF/
|
# PUlAq9bidlKz9NnYy/2j/lDWK7pxYECRLcQG7OmFw4PrDdSiO9NhoG+2+CwE5RF0
|
||||||
# ZE7r52v0iDmoUi5wz/c0lbRQWlIEzt8B8SbkQULx6cHRHKy+SDCkjxJI/TqXdvnn
|
# qqeUUWWXLYVO4Vqsj/laEOh5NWsQvGoxiKK2x+ei3rt/DsQ/4RtQtClbp+krKG7v
|
||||||
# IbF+eloX413aq5W6/8mVpYoKlLRbbS94X1PgKMHxtS/0Ya4Mpbyr+9pjG6YhidA8
|
# ooO8EDGsuWDYKHNu4VVPSb7WKdhOLqRYunT4DaOa/Nl7S8Evipswj6ugD0Fdhz19
|
||||||
# G30mjrHDj6GCDiswgg4nBgorBgEEAYI3AwMBMYIOFzCCDhMGCSqGSIb3DQEHAqCC
|
# cb9p6b59ZqGCDiswgg4nBgorBgEEAYI3AwMBMYIOFzCCDhMGCSqGSIb3DQEHAqCC
|
||||||
# DgQwgg4AAgEDMQ0wCwYJYIZIAWUDBAIBMIH+BgsqhkiG9w0BCRABBKCB7gSB6zCB
|
# DgQwgg4AAgEDMQ0wCwYJYIZIAWUDBAIBMIH+BgsqhkiG9w0BCRABBKCB7gSB6zCB
|
||||||
# 6AIBAQYLYIZIAYb4RQEHFwMwITAJBgUrDgMCGgUABBRle6XLfAF1irMqXfHR3RfL
|
# 6AIBAQYLYIZIAYb4RQEHFwMwITAJBgUrDgMCGgUABBSNVXS25QWTWua8aykdDhMJ
|
||||||
# AxIw0gIUMj3OWqGgsLUt+ICmTL9aGS/WQqEYDzIwMjEwODI0MTQ0MjM1WjADAgEe
|
# 3mhCzQIUS2ETr2jWXxMf93x77MboWkKQlEsYDzIwMjExMDA0MjA0NjE4WjADAgEe
|
||||||
# oIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9y
|
# oIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9y
|
||||||
# YXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMT
|
# YXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMT
|
||||||
# KFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIF
|
# KFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIF
|
||||||
@@ -1233,13 +1281,13 @@ exit $ExitCode
|
|||||||
# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l
|
# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l
|
||||||
# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EC
|
# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EC
|
||||||
# EHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzEN
|
# EHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzEN
|
||||||
# BgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjEwODI0MTQ0MjM1WjAvBgkq
|
# BgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjExMDA0MjA0NjE4WjAvBgkq
|
||||||
# hkiG9w0BCQQxIgQg+8r+miUYUaWD81auvyH5duQKFpfNCvFn1LPKV9UJT3EwNwYL
|
# hkiG9w0BCQQxIgQgCQRf15Lc2WIYkjt+tK2O5aMB8lwbsYGOa8hDIsKzBMwwNwYL
|
||||||
# KoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9d
|
# KoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9d
|
||||||
# tx/fYfgwCwYJKoZIhvcNAQEBBIIBAAa8bZCJyW7ZsiHiXpxlBvzBAK+5Ft4xMw7i
|
# tx/fYfgwCwYJKoZIhvcNAQEBBIIBAG4XNFoioU2nWY0eeLO56kWzL6zFTqjYS3fL
|
||||||
# XPST6hrNYVCpFgW1L70Euu0naSwfYmmipY1ZoPZZjVe2ANf5HZQUEgvhWgZXx6nL
|
# pAjv0sNj7RP0YAUkNC/IK3BQfa/n/pVcrsUTPg0ZECPJJD6ChZfUhrU6YG9o0QGs
|
||||||
# Zzltbb8Oy3lZlDqxd97hxPwEXIPsmdjoC1JS6KO8FHppcBIqTBCbgPyi+KYOHIxO
|
# s7DtvXMykusVV1I+H6pTfKBjuVMhIkzswEyD+PP+FxbKkJZRX0HDv39ltevRs+yk
|
||||||
# 5tAaG3lzF2JF2IjpYworOaNIfV/o6D+myj5XVSbRrV9t+3DFm0DGKnc3PmW4avrP
|
# ZU9uP5tGCOwrd1JqPYBKnBCjIZb08W7tHdZbYDL+ve2k9qBLmGMIcuJ/9AXzQHJS
|
||||||
# pvUtJZOMkeKdEbZRQ/mgQ0iesdQU86oQhcLksow0E/bs3H+KEY6GZ+CgXSr2PvH0
|
# 0YJV24161ZpddNUoLevgvRTdU1nR8DMsZ0RwPZXA9q8Z4jEQbQW0OYwfEr53tTRw
|
||||||
# VBI7GTotS2/Eggjqggimya0o+zlJ3Viagm7h6r7ZNwfiWFnNk7U=
|
# z+o4T45hAta+SbpHg4dThdS6wv6gF849BseXSUx8nggduBE+EAc=
|
||||||
# SIG # End signature block
|
# SIG # End signature block
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
Fido: Full ISO Download Script (for Windows retail ISOs)
|
Fido: A PowerShell download script for Windows ISOs and UEFI Shell
|
||||||
========================================================
|
==================================================================
|
||||||
|
|
||||||
[](https://www.gnu.org/licenses/gpl-3.0.en.html)
|
[](https://www.gnu.org/licenses/gpl-3.0.en.html)
|
||||||
[](https://github.com/pbatard/Fido/releases)
|
[](https://github.com/pbatard/Fido/releases)
|
||||||
@@ -9,7 +9,7 @@ Description
|
|||||||
|
|
||||||
Fido is a PowerShell script that is primarily designed to be used in [Rufus](https://github.com/pbatard/rufus), but that
|
Fido is a PowerShell script that is primarily designed to be used in [Rufus](https://github.com/pbatard/rufus), but that
|
||||||
can also be used in standalone fashion, and whose purpose is to automate access to the official Microsoft Windows retail
|
can also be used in standalone fashion, and whose purpose is to automate access to the official Microsoft Windows retail
|
||||||
ISO download links.
|
ISO download links as well as provide convenient access to bootable UEFI Shell images.
|
||||||
|
|
||||||
This script exists because, while Microsoft does make retail ISO download links freely and publicly available (at least
|
This script exists because, while Microsoft does make retail ISO download links freely and publicly available (at least
|
||||||
for Windows 8 and Windows 10), it only does so after actively forcing users to jump through a lot of unwarranted hoops,
|
for Windows 8 and Windows 10), it only does so after actively forcing users to jump through a lot of unwarranted hoops,
|
||||||
|
Reference in New Issue
Block a user