mirror of
https://github.com/pbatard/Fido.git
synced 2025-09-17 14:48:02 +02:00
Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f8aacf0703 | ||
![]() |
24a7a04d78 | ||
![]() |
eefc2453c4 | ||
![]() |
ed1a6b31a6 |
78
Fido.ps1
78
Fido.ps1
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Fido v1.33 - Feature ISO Downloader, for retail Windows images and UEFI Shell
|
# Fido v1.35 - Feature ISO Downloader, for retail Windows images and UEFI Shell
|
||||||
# Copyright © 2019-2022 Pete Batard <pete@akeo.ie>
|
# Copyright © 2019-2022 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
|
||||||
@@ -80,11 +80,12 @@ $code = @"
|
|||||||
|
|
||||||
if (!$Cmd) {
|
if (!$Cmd) {
|
||||||
Write-Host Please Wait...
|
Write-Host Please Wait...
|
||||||
|
$Drawing_Assembly = "System.Drawing"
|
||||||
|
# PowerShell 7 altered the name of the Drawing assembly...
|
||||||
if ($host.version -ge "7.0") {
|
if ($host.version -ge "7.0") {
|
||||||
Add-Type -WarningAction Ignore -IgnoreWarnings -MemberDefinition $code -Namespace Gui -UsingNamespace System.Runtime, System.IO, System.Text, System.Drawing, System.Globalization -ReferencedAssemblies System.Drawing.Common -Name Utils -ErrorAction Stop
|
$Drawing_Assembly += ".Common"
|
||||||
} else {
|
|
||||||
Add-Type -MemberDefinition $code -Namespace Gui -UsingNamespace System.IO, System.Text, System.Drawing, System.Globalization -ReferencedAssemblies System.Drawing -Name Utils -ErrorAction Stop
|
|
||||||
}
|
}
|
||||||
|
Add-Type -ErrorAction Stop -WarningAction Ignore -IgnoreWarnings -MemberDefinition $code -Namespace Gui -UsingNamespace System.Runtime, System.IO, System.Text, System.Drawing, System.Globalization -ReferencedAssemblies $Drawing_Assembly -Name Utils
|
||||||
Add-Type -AssemblyName PresentationFramework
|
Add-Type -AssemblyName PresentationFramework
|
||||||
# Hide the powershell window: https://stackoverflow.com/a/27992426/1069307
|
# Hide the powershell window: https://stackoverflow.com/a/27992426/1069307
|
||||||
[Gui.Utils]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0) | Out-Null
|
[Gui.Utils]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0) | Out-Null
|
||||||
@@ -97,6 +98,11 @@ $ko = 0x20000
|
|||||||
$WindowsVersions = @(
|
$WindowsVersions = @(
|
||||||
@(
|
@(
|
||||||
@("Windows 11", "windows11"),
|
@("Windows 11", "windows11"),
|
||||||
|
@(
|
||||||
|
"22H2 v1 (Build 22621.525 - 2022.10)",
|
||||||
|
@("Windows 11 Home/Pro/Edu", 2370),
|
||||||
|
@("Windows 11 Home China ", ($zh + 2371))
|
||||||
|
),
|
||||||
@(
|
@(
|
||||||
"22H2 (Build 22621.382 - 2022.09)",
|
"22H2 (Build 22621.382 - 2022.09)",
|
||||||
@("Windows 11 Home/Pro/Edu", 2360),
|
@("Windows 11 Home/Pro/Edu", 2360),
|
||||||
@@ -115,6 +121,12 @@ $WindowsVersions = @(
|
|||||||
),
|
),
|
||||||
@(
|
@(
|
||||||
@("Windows 10", "Windows10ISO"),
|
@("Windows 10", "Windows10ISO"),
|
||||||
|
# Not yet enabled by Microsoft...
|
||||||
|
# @(
|
||||||
|
# "22H2 (Build 1904?.???? - 2022.10)",
|
||||||
|
# @("Windows 10 Home/Pro/Edu", 2377),
|
||||||
|
# @("Windows 10 Home China ", ($zh + 2378))
|
||||||
|
# ),
|
||||||
@(
|
@(
|
||||||
"21H2 (Build 19044.1288 - 2021.11)",
|
"21H2 (Build 19044.1288 - 2021.11)",
|
||||||
@("Windows 10 Home/Pro/Edu", 2084),
|
@("Windows 10 Home/Pro/Edu", 2084),
|
||||||
@@ -960,6 +972,10 @@ if ($Cmd) {
|
|||||||
}
|
}
|
||||||
if ($Lang -eq "List") {
|
if ($Lang -eq "List") {
|
||||||
Write-Host "Please select a Language (-Lang) for ${Selected}:"
|
Write-Host "Please select a Language (-Lang) for ${Selected}:"
|
||||||
|
} elseif ($Lang) {
|
||||||
|
# Escape parentheses so that they aren't interpreted as regex
|
||||||
|
$Lang = $Lang.replace('(', '\(')
|
||||||
|
$Lang = $Lang.replace(')', '\)')
|
||||||
}
|
}
|
||||||
$i = 0
|
$i = 0
|
||||||
foreach ($language in $languages) {
|
foreach ($language in $languages) {
|
||||||
@@ -976,7 +992,7 @@ if ($Cmd) {
|
|||||||
}
|
}
|
||||||
$i++
|
$i++
|
||||||
}
|
}
|
||||||
if ($winLanguageId -eq $null -or $winLanguageName -eq $null) {
|
if (!$winLanguageId -or !$winLanguageName) {
|
||||||
if ($Lang -ne "List") {
|
if ($Lang -ne "List") {
|
||||||
Write-Host "Invalid Windows language provided."
|
Write-Host "Invalid Windows language provided."
|
||||||
Write-Host "Use '-Lang List' for a list of available languages or remove the option to use system default."
|
Write-Host "Use '-Lang List' for a list of available languages or remove the option to use system default."
|
||||||
@@ -1172,8 +1188,8 @@ exit $ExitCode
|
|||||||
# SIG # Begin signature block
|
# SIG # Begin signature block
|
||||||
# MIIkWQYJKoZIhvcNAQcCoIIkSjCCJEYCAQExDzANBglghkgBZQMEAgEFADB5Bgor
|
# MIIkWQYJKoZIhvcNAQcCoIIkSjCCJEYCAQExDzANBglghkgBZQMEAgEFADB5Bgor
|
||||||
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
|
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
|
||||||
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDUeFzYLyGc6jXF
|
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBY/5IAG/GViBcd
|
||||||
# dBz+FBcylnkilIubS5cDHWoqJHxaM6CCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
|
# 1JTY1vmyD3aBIuP9LO6GCK/ojLlAlKCCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
|
||||||
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
|
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
|
||||||
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
|
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
|
||||||
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
|
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
|
||||||
@@ -1276,23 +1292,23 @@ exit $ExitCode
|
|||||||
# aWMgQ29kZSBTaWduaW5nIENBIEVWIFIzNgIRAL+xUAG79ZLUlip3l+pzb6MwDQYJ
|
# aWMgQ29kZSBTaWduaW5nIENBIEVWIFIzNgIRAL+xUAG79ZLUlip3l+pzb6MwDQYJ
|
||||||
# YIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK
|
# YIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK
|
||||||
# KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG
|
# KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG
|
||||||
# 9w0BCQQxIgQg4UMUZV9lRQzMprUkABF0BlPniTPJlUMtr+dcV+8/NxMwDQYJKoZI
|
# 9w0BCQQxIgQgNcSdxNkDC+T0P75/9E4SzKGSNuqQIeqogrTBOhm8QicwDQYJKoZI
|
||||||
# hvcNAQEBBQAEggIAEFuVP/hg/nQQ28s0nUKy36g+a1QFfQ/WY1IyP90JIZ/1+oO1
|
# hvcNAQEBBQAEggIABeOCwDNendZb+8jZ1AhX5gYbY2KMZiCzIFV1XcegsgAkEaHx
|
||||||
# 5Aid5+FpJKhjb/E8mXO+/ntoSwbKSq+0lBPTTmI/RFT755VZvh/DupxXaz2+pVZ5
|
# k7nr6A8EePp1AApRrsD11l4Ldc13tIkcgE48FgT98yPqJVQdNm7eTgmNE/hbGW1v
|
||||||
# 1t818dt7jq1GqqWIXEJSUwyoYe5PXrC2G9HWr2umRG+p+yo+6j13etJLYL28TScA
|
# fTX1SjBmeDgahx/XQszCMZ3c6+po7OQPbACt0ovzDXWnu5mQHuvqSrCw8G/uN/zb
|
||||||
# UgJt1sZdAcQ176c3zqVEAzs26AmVpmA47he0d8vLVD4X/HmGLf/eisAjedNe9sN5
|
# N6uu6FlN+nM7MCPQkbf4x9IOWyfiVziUTmM8XO7JtySCt1oa49RtimRYYSbI2zZh
|
||||||
# U2jecv09DdD3MZ8NEK01vDhpgd8M68oq6o1/5aB+EW2YwXQFcuQbbp4jcAtWDvTW
|
# uiqrl4pmdB86g8atK4BhedU1g6fKp23Qk+qo+w8eHSGTfPrz5YsGQtpTgpZxp50T
|
||||||
# xRG8znfZ6sZe0vmxkNImBSynON52ficdSqp/UYH6E655bLniO6AhLPGG16suDGM/
|
# pkcbj96entuv/hbj4Vn/j1xB0rwnQRCtGeSYgZMDYFIC8FHFz19TvlwAsDOGBTK/
|
||||||
# DqG05IoVKsBqKtOJT1E08ShODjLt3or6x6XVn5WWbafnjB5NjBN9xZKPxR2gxE8H
|
# Q2e1/yMctzT6YX6k5K7eIk0p6tWh1kqd6AZB+3kjJv52wJQ+cvaVgmI+hWoyQYJ6
|
||||||
# KzMvLhrT29SDpgXb1lQZ1364yRiFi6Ocv9VC53oOg3LuFUjThdFr+kFp+GyAzG3S
|
# O7gC0MG0d+ohF2YuUEyhBQRn+QJ/9u+g4KiFoqBTXr697viAIaTeY//hpbL1S1RI
|
||||||
# 1PivyLVsxn4AYKNPawth1wYCVDxTY9D2nk6UsAxGrV6bD6SDnIUQTYj0u+dMZYjn
|
# IdDbAr063jxYOykSIhdydRWhrw01slvIKr1o13s/6iDgSPTRd723Wv3dld/I6w5/
|
||||||
# zHjhqE8jAVcXARG3tixRyRo0GuOHgo7gAoNdwSV/qncmHVSayu42aMo0uq/m/uBG
|
# zIoa+3PpyxoYb8RvP5eqgEAbHEteBc8KuNp55WaFUKb8K6UlHDHGsgAgcZboD2T5
|
||||||
# Un5TtSo2cxkiA/R+t0AQfkFycxh7xRsrZQEbpdINvd2uPzpSulWCQ44dJO6hgg49
|
# 6N0FOz+v1Cznbsv0USQdynh4DQSAcIB9klcOkkoAlsgQH74k4EyusV/29iWhgg49
|
||||||
# MIIOOQYKKwYBBAGCNwMDATGCDikwgg4lBgkqhkiG9w0BBwKggg4WMIIOEgIBAzEN
|
# MIIOOQYKKwYBBAGCNwMDATGCDikwgg4lBgkqhkiG9w0BBwKggg4WMIIOEgIBAzEN
|
||||||
# MAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgB
|
# MAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgB
|
||||||
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCAF0PPeYlamcvCFCNrLf6a2MOaNAL7G
|
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCAmmVONt91+fvut9U75MR5SgbgybtGV
|
||||||
# S1d7gX3YVhCWkgIVAMWb0uP+c1wcM05ZVfs1BbLIPXFTGA8yMDIyMDkyMTE1NTY0
|
# mK0CngIkWNBScQIVAPwPX0skCWZcVxSwVijYEseWntqDGA8yMDIyMTAwMTEyNTQ0
|
||||||
# MVowAwIBHqCBhqSBgzCBgDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVj
|
# M1owAwIBHqCBhqSBgzCBgDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVj
|
||||||
# IENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEw
|
# IENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEw
|
||||||
# LwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAtIEcz
|
# LwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAtIEcz
|
||||||
# oIIKizCCBTgwggQgoAMCAQICEHsFsdRJaFFE98mJ0pwZnRIwDQYJKoZIhvcNAQEL
|
# oIIKizCCBTgwggQgoAMCAQICEHsFsdRJaFFE98mJ0pwZnRIwDQYJKoZIhvcNAQEL
|
||||||
@@ -1355,13 +1371,13 @@ exit $ExitCode
|
|||||||
# BgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBU
|
# BgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBU
|
||||||
# cnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9TeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1w
|
# cnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9TeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1w
|
||||||
# aW5nIENBAhB71OWvuswHP6EBIwQiQU0SMAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG
|
# aW5nIENBAhB71OWvuswHP6EBIwQiQU0SMAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG
|
||||||
# 9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIyMDkyMTE1NTY0
|
# 9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIyMTAwMTEyNTQ0
|
||||||
# MVowLwYJKoZIhvcNAQkEMSIEILvZi3muWrod7K9kHyk/WE6ivgHJtSCXjde+vv8Z
|
# M1owLwYJKoZIhvcNAQkEMSIEIN6q/xtR2+ZALUnoqNXx196zuj9xFk7Ajyd8CrCr
|
||||||
# WiczMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIMR0znYAfQI5Tg2l5N58FMaA+eKC
|
# WmI8MDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIMR0znYAfQI5Tg2l5N58FMaA+eKC
|
||||||
# ATz+9lPvXbcf32H4MAsGCSqGSIb3DQEBAQSCAQCmIEtfCe7GnEezhZmxNvjQG68a
|
# ATz+9lPvXbcf32H4MAsGCSqGSIb3DQEBAQSCAQAxZTurueFa0gsxsKPdVmcoAp3k
|
||||||
# z9Ve9nQbbwqf+q4nHnkBo2GC0Yy/DxnX4guloxGcw/9DVwxzzC7ItJEG0qmAY0Pl
|
# EEqW9x41BRlxKV1s0uqV1DEEozXmnJnoqSDm/bLx4xGTZujjPe2UrdOk5445lev8
|
||||||
# bdDVLyldAwZYcY43LriCS80x5xLZQjkpPSQurs3uTcGbwkqno20XZdRMSvUYdI0K
|
# JkIRwKJ+LmMb7DtzNkkNPvXi11PD4y/B7J0EVlQ0QCnU+CU8tW3GnAu28whQHk/X
|
||||||
# how//ZKXn9XcQGcvaCIGCzttS433m3khkILUiVvZNOqGERX6BqNjX5OX4QscK1uR
|
# 5Fs4jRIaxmBSrDspa3yGsrlqjUpmsF6tA5UEQi+fA5JmvVq6CpiUaXf9JGLQgfGz
|
||||||
# kRKEPdL9WMIv3MX902bnnC8OqeuHcKcjdIuokzGfDYoGJe8aGOWTsScivdft+5Go
|
# zt8XVyLcXJEXMS1lA54z8R8XiJzrT9bOoHZxwSlRZswDAosfe3PAWbS9sKnatYCX
|
||||||
# C1W4KLv7+jEF0n05S0Sd/ebBFYM4Zq2EQVpj1KeLyrPHonZYwZGzbXpwRC3W
|
# LgWGsxXn040/9cei5szi4Z4ltGUYI7gdNTYafRS/mCRbgfITpfzlpAzk07II
|
||||||
# SIG # End signature block
|
# SIG # End signature block
|
||||||
|
24
README.md
24
README.md
@@ -1,5 +1,5 @@
|
|||||||
Fido: A PowerShell download script for Windows ISOs and UEFI Shell
|
Fido: A PowerShell download script for Microsoft Windows and UEFI Shell ISOs
|
||||||
==================================================================
|
============================================================================
|
||||||
|
|
||||||
[](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,12 +9,12 @@ 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 as well as provide convenient access to bootable UEFI Shell images.
|
ISO download links as well as provide convenient access to [bootable UEFI Shell images](https://github.com/pbatard/UEFI-Shell).
|
||||||
|
|
||||||
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 through Windows 11), up until recent releases, most of these links were only available after forcing users
|
||||||
that create an exceedingly counterproductive, if not downright unfriendly, consumer experience and that greatly detract
|
to jump through a lot of unwarranted hoops that created an exceedingly counterproductive, if not downright unfriendly,
|
||||||
from what people really want (direct access to ISO downloads).
|
consumer experience, that greatly detracted from what people really want (direct access to ISO downloads).
|
||||||
|
|
||||||
As to the reason one might want to download Windows __retail__ ISOs, as opposed to the ISOs that are generated by
|
As to the reason one might want to download Windows __retail__ ISOs, as opposed to the ISOs that are generated by
|
||||||
Microsoft's own Media Creation Tool (MCT), this is because using official retail ISOs is currently the only way to
|
Microsoft's own Media Creation Tool (MCT), this is because using official retail ISOs is currently the only way to
|
||||||
@@ -42,16 +42,16 @@ License
|
|||||||
How it works
|
How it works
|
||||||
------------
|
------------
|
||||||
|
|
||||||
The script basically performs the same operation as one might perform when visiting either of the following URLs (that
|
The script basically performs the same operation as one might perform when visiting the following URL (that is, in the
|
||||||
is, provided that you have also changed your `User-Agent` browser string, since, when they detect that you are using a
|
case of Windows 10, provided that you have also changed your `User-Agent` browser string, since, the Microsoft web
|
||||||
version of Windows that is the same as the one you are trying to download, the Microsoft web servers at these addresses
|
servers detect that you are using a version of Windows that is the same as the one you are trying to download, they
|
||||||
redirect you __away__ from the pages that allow you to download retail ISOs):
|
may redirect you __away__ from the page that allows you to obtain a direct ISO download link):
|
||||||
|
|
||||||
https://www.microsoft.com/en-us/software-download
|
https://www.microsoft.com/en-us/software-download
|
||||||
|
|
||||||
After checking access to these URLs, to confirm that they are accessible, the script first queries the web API from the
|
After checking basic access to the Microsoft software downloads website the script first queries the web API from the
|
||||||
Microsoft servers, to request the language selection available for the version of Windows selected, and then requests
|
Microsoft servers, to request the language selection available for the version of Windows selected, and then requests
|
||||||
the actual download links for all the architectures available for that language + version.
|
the actual download links, for all the architectures available for that language + version.
|
||||||
|
|
||||||
Requirements
|
Requirements
|
||||||
------------
|
------------
|
||||||
|
Reference in New Issue
Block a user