Compare commits

...

54 Commits
v1.16 ... v1.50

Author SHA1 Message Date
Pete Batard
4a694421af Add UEFI Shell 2.2 23H1 download 2023-06-06 13:49:50 +01:00
Pete Batard
15a1a5923d Add Windows 10 22H2 v1 downloads
* Closes #72
2023-05-25 00:07:45 +01:00
ChaseKnowlden
85a29fa2ae Add Windows 11 22H2 v2 downloads
* And remove Windows 11 22H2 v1 downloads since these have been disabled by Microsoft
* Closes #71
2023-05-24 00:31:37 +01:00
Pete Batard
a99f8a10d3 Remove releases that have been made inaccessible by Microsoft
* Closes #67
2023-05-23 17:26:18 +01:00
Pete Batard
146eec8673 Add -Locale option and fix encoding for error handling 2023-05-15 11:42:08 +01:00
Pete Batard
e9a0a367d9 Update README 2023-04-14 11:54:05 +01:00
Pete Batard
0b0643abc8 Remove Windows 7 downloads
* Since Microsoft removed the ISOs from their servers
* Closes #64
2023-04-14 11:42:34 +01:00
Dmitry Nefedov
1d88deac7c Improve code for P/Invoke
* Closes #62
2023-04-14 11:36:33 +01:00
Pete Batard
9025d258e8 Harmonise the use of $true/$false and not operator 2023-04-14 11:29:40 +01:00
Pete Batard
425eb4da24 Prevent Fido from running on non Windows platforms
* Per #58, we consider that letting non-Windows users run Fido is going to become
  too much of liability moving forward, so the script now detects non Windows
  platforms and actively prevent itself from running there.
* Closes #60.
* Also some whitespace cleanup.
2023-03-07 12:16:57 +00:00
Pete Batard
10acbf9f84 Improve error handling
* Simplify regex and fix unconverted characters.
* Also use Start-BitsTransfer for cmdline downloads (Closes #56).
* Also remove -DisableProgress now that we use Start-BitsTransfer.
2023-02-06 01:22:02 +00:00
Pete Batard
4b24ae5795 Fix Windows 7 detection
* Of course, Windows 7's PowerShell is too stupid to actually compare Version objects.
2023-01-27 15:12:02 +00:00
Pete Batard
2ca0f62f53 Fix language regexp and force TLS for Windows 8.x
* Non En locales may still return '<select id="product-languages">' instead of
  '<select id="product-languages" ...>' so make sure we account for that case.
* Addresses pbatard/rufus#2148
* Also force TLS for Windows 8.x to address pbatard/rufus#2133
2023-01-27 13:39:13 +00:00
Pete Batard
448cfa72cf Remove Windows 7 support
* "I'm sorry for your loss. Move on."
2023-01-27 13:28:28 +00:00
Pete Batard
9552df66d5 Update language option regexp to match latest Microsoft HTML fragment
* Addresses pbatard/rufus#2146
* Also update .gitattributes to clean up release archives
2023-01-25 20:04:14 +00:00
Pete Batard
4bafb688da Remove unneeded files
* .whitesource is unneeded because we don't use external dependencies.
* VS project files are unneeded when we just edit the .ps1 in a text editor.
2023-01-11 20:22:13 +00:00
Pete Batard
ad79094c30 Improve error handling and reporting when querying vlscppe.microsoft.com
* Also use a better default icon and add a preemptive localized message for
  future countermeasures from Microsoft.
2023-01-09 17:32:59 +00:00
Pete Batard
8cf4a279ff Work around Microsoft's new ISO download countermeasures
* The Microsoft servers now use session Id whitelisting, so add querying
  of https://vlscppe.microsoft.com/tags with the session Id.
* Closes #52.
* Also harmonize/improve -replace calls
* Also make sure we use POST for the getskuinformationbyproductedition
  query (in case Microsoft add some more countermeasures).
* Also drop 'cmd /c' invocation in sign.sh since the cygwin people can't
  seem to get their act together there...
2023-01-08 22:10:01 +00:00
Pete Batard
84f833b067 Improve error reporting
* Now return the error message from the Microsoft server where possible (See #52)
2023-01-06 21:58:20 +00:00
Pete Batard
c34a41fe3f Add UEFI Shell 2.2 22H2 download 2022-12-15 00:20:19 +00:00
Erik Dansbo
6593585ff3 Add an option to disable progress report for commandline
* Closes #50
2022-12-14 17:11:09 +00:00
Pete Batard
fac4c49262 Add Windows 10 22H2 builds
* And remove Windows 11 22H2 *v0* builds since Microsoft removed the ISOs from their servers
2022-10-19 13:48:03 +01:00
Pete Batard
f8aacf0703 Add Windows 11 22H2 v1 builds
* "How many Microsoft engineers does it take to release the ISO of a light bulb?"
* This addresses #45 by restoring a working Windows 11 22H2 download, though it
  remains to be seen if the ISO for 22H2 v0 will be accessible ever again...
2022-10-01 13:59:42 +01:00
Pete Batard
24a7a04d78 Update README 2022-09-23 17:36:21 +01:00
Pete Batard
eefc2453c4 Fix handling of parentheses for -Lang option
* Closes #29
2022-09-23 17:02:36 +01:00
Pete Batard
ed1a6b31a6 Fix Add-Type warnings being treated as errors on PS < 7.0
* Closes pbatard/rufus#2030
2022-09-23 16:47:44 +01:00
Pete Batard
9beb231b78 Fix Windows 7 "Referer header" error
* Closes #44
* Also fix incorrect build number for Windows 11 22H2
2022-09-21 16:59:01 +01:00
Pete Batard
ce7cb583e5 Add Windows 11 22H2 builds 2022-09-20 22:57:29 +01:00
William Bulin
0287fe274e Fixed Windows 10/11 ISO downloads
* Closes #41
* Closes #42
2022-08-13 15:08:20 +01:00
Pete Batard
129e5d6f5c Disable Windows ISO downloads
* Per #41 Microsoft appear to have altered their website to make it hostile to our script.
* Considering that trying to troubleshoot this is likely to take a long while, and that I
  sure could use some help with it, add a notice about this whole mess...
2022-08-12 14:02:34 +01:00
Pete Batard
79bcf10633 Add Shell 2.2 22H1 download 2022-05-28 15:21:05 +01:00
Pete Batard
35b8863c0c Bump version and update signing script for EV cert 2022-01-26 21:49:05 +01:00
Biswapriyo Nath
bb2c04cb07 Add Windows 11 21H2 v1 22000.318 builds
* Closes #35
2022-01-26 21:49:04 +01:00
Pete Batard
e1535ba775 Add Windows 10 21H2 19044.1288 builds 2021-11-16 21:04:41 +00:00
Muhammad Hussein Ammari
2a139583ce Update README.md (#27)
* https://www.microsoft.com/software-download/Windows8ISO
* https://www.microsoft.com/software-download/Windows10ISO
These links will be redirected to the following site:
https://www.microsoft.com/en-us/software-download
2021-10-07 10:16:29 +01:00
Pete Batard
e293e97bac Add Windows 11 downloads
NB: No Edu yet
2021-10-04 22:47:54 +02:00
Biswapriyo Nath
b1eebac8dc Add Windows 10 Redstone 5 17763.379 builds
* Closes #25
2021-09-25 21:11:17 +01:00
Pete Batard
8508ac6164 Add UEFI Shell 2.0 ISO downloads
* Also retrieve archs from the GitHub releases
* Also add Shell 2.2 21H2 download
2021-08-30 21:41:07 +01:00
Pete Batard
eac06c958f Update README.md 2021-08-24 16:49:42 +02:00
Pete Batard
2ee5f896d3 Add UEFI Shell bootable ISO downloads 2021-08-24 16:43:44 +02:00
Pete Batard
28725b287c Update README.md 2021-08-19 23:00:56 +02:00
Pete Batard
b7331f7873 Fix download of Windows 10 1507
* This versions uses weird SkuIds ('FQC-08932', 'FQC-08929', ...) that aren't integers...
* Closes pbatard/rufus#1769
2021-08-19 22:48:59 +02:00
Pete Batard
6160db3c66 Improve download handling for commandline
* Report the download size and handle errors
* Also improve exit code and verbosity handling
2021-08-15 13:44:38 +02:00
flx5
8b40c85d76 Add Commandline support
* Also fix a regression introduced by previous commit
* Closes #15
* Closes #24
2021-08-07 23:32:09 +02:00
Pete Batard
f70836e6c1 Split stages into separate function calls
* This is based on work done by flx5 in branch https://github.com/flx5/Fido
2021-08-06 22:39:34 +02:00
Pete Batard
af17001505 Add Windows 7 en-US ISO downloads
* Because why not?
2021-06-10 11:42:44 +01:00
Pete Batard
43adf47d5d Sign our script
* Because why not, and some folks might have policies where this could help.
2021-05-26 17:32:36 +01:00
Pete Batard
99f6f246b8 Add Windows 10 21H1 19043.985 builds
* https://support.microsoft.com/en-us/topic/windows-10-update-history-1b6aac92-bf01-42b5-b158-f80c6d93eb11
2021-05-22 17:34:07 +01:00
Pete Batard
36e9b4420c Remove DisableFirstRunCustomize related options
* No longer needed, since we are not invoking IE behind the scenes any more.
* Also update "fake" Firefox version range.
2021-05-22 13:35:51 +01:00
Pete Batard
6d630f83f2 Switch to basic parsing everywhere and perform our own DOM handling
* Addresses #19
* Also fix PowerShell 7.1.3 warnings
2021-05-13 14:10:12 +01:00
Pete Batard
ee0393cb74 Update version and copyright year 2021-01-30 02:55:42 +00:00
isos4all
a8abb94a16 Add Windows 10 20H2 19042.631 builds
* Microsoft updated 20H2 in December. Make sure we enable those downloads too.
* Closes #21
2021-01-30 02:53:59 +00:00
Pete Batard
15a48fe24f Fix script failure with PowerShell 7.x
* Won't help though, since Microsoft forcibly removed the ability to
  parse HTML in newer PowerShell, which we need...
* Also fix session variable not being set.
* Closes #19
2020-11-16 17:26:11 +00:00
Pete Batard
e0c1015ade Add Windows 10 20H2 19042.508 builds 2020-10-21 14:58:08 +01:00
8 changed files with 912 additions and 415 deletions

View File

@@ -2,7 +2,8 @@
root = true
[*]
trim_trailing_whitespace = true
insert_final_newline = true
# Must use a BOM else Unicode strings will not display
charset = utf-8-bom
insert_final_newline = true
indent_style = tab
trim_trailing_whitespace = true

3
.gitattributes vendored
View File

@@ -1,3 +1,6 @@
* text=auto
*.ps1 eol=crlf
*.sh eol=lf
.gitattributes export-ignore
.gitignore export-ignore
sign.sh export-ignore

View File

@@ -1,8 +0,0 @@
{
"checkRunSettings": {
"vulnerableCheckRunConclusionLevel": "failure"
},
"issueSettings": {
"minSeverityLevel": "LOW"
}
}

1108
Fido.ps1

File diff suppressed because it is too large Load Diff

View File

@@ -1,35 +0,0 @@
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>6CAFC0C6-A428-4d30-A9F9-700E829FEA51</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>Fido</RootNamespace>
<AssemblyName>Fido</AssemblyName>
<Name>Frida</Name>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup />
<ItemGroup>
<Compile Include="Fido.ps1" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Target Name="Build" />
<Import Project="$(MSBuildExtensionsPath)\PowerShell Tools for Visual Studio\PowerShellTools.targets" Condition="Exists('$(MSBuildExtensionsPath)\PowerShell Tools for Visual Studio\PowerShellTools.targets')" />
</Project>

View File

@@ -1,25 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.271
MinimumVisualStudioVersion = 10.0.40219.1
Project("{F5034706-568F-408A-B7B3-4D38C6DB8A32}") = "Fido", "Fido.pssproj", "{6CAFC0C6-A428-4D30-A9F9-700E829FEA51}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6CAFC0C6-A428-4D30-A9F9-700E829FEA51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6CAFC0C6-A428-4D30-A9F9-700E829FEA51}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6CAFC0C6-A428-4D30-A9F9-700E829FEA51}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6CAFC0C6-A428-4D30-A9F9-700E829FEA51}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AD54CEAE-0992-4213-BEDB-8F1CF98A9F22}
EndGlobalSection
EndGlobal

101
README.md
View File

@@ -1,5 +1,5 @@
Fido: Full ISO Download Script (for Windows retail ISOs)
========================================================
Fido: A PowerShell download script for Microsoft Windows and UEFI Shell ISOs
============================================================================
[![Licence](https://img.shields.io/badge/license-GPLv3-blue.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html)
[![Github stats](https://img.shields.io/github/downloads/pbatard/Fido/total.svg?style=flat-square)](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
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](https://github.com/pbatard/UEFI-Shell).
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,
that create an exceedingly counterproductive, if not downright unfriendly, consumer experience and that greatly detract
from what people really want (direct access to ISO downloads).
for Windows 8 through Windows 11), up until recent releases, most of these links were only available after forcing users
to jump through a lot of unwarranted hoops that created an exceedingly counterproductive, if not downright unfriendly,
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
Microsoft's own Media Creation Tool (MCT), this is because using official retail ISOs is currently the only way to
@@ -42,40 +42,89 @@ License
How it works
------------
The script basically performs the same operation as one might perform when visiting either of the following URLs (that
is, provided that you have also changed your `User-Agent` browser string, since, when they detect that you are using a
version of Windows that is the same as the one you are trying to download, the Microsoft web servers at these addresses
redirect you __away__ from the pages that allow you to download retail ISOs):
The script basically performs the same operation as one might perform when visiting the following URL (that is, in the
case of Windows 10, provided that you have also changed your `User-Agent` browser string, since, the Microsoft web
servers detect that you are using a version of Windows that is the same as the one you are trying to download, they
may redirect you __away__ from the page that allows you to obtain a direct ISO download link):
* https://www.microsoft.com/software-download/Windows8ISO
* https://www.microsoft.com/software-download/Windows10ISO
https://www.microsoft.com/en-us/software-download
After visiting those with a full browser (Internet Explorer, running through the `Invoke-WebRequest` PowerShell Cmdlet),
to confirm that they are accessible, the script then queries the web API from the Microsoft servers to first request the
language selection available for the version of Windows selected by the user, and then request the actual download links
for all the architectures available for that specific combination of version + language.
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
the actual download links, for all the architectures available for that language + version.
Requirements
------------
PowerShell 3.0 or later is required. However the script will detect if you are using an older version and point you to
the relevant PowerShell 3.0 download page if needed (which should only ever occur if you are running a vanilla version
of Windows 7).
Windows 8 or later with PowerShell. Windows 7 is __not__ supported.
Also, because Internet Explorer is being invoked behind the scenes, if you haven't gone through the first time setup for
Internet Explorer, you may receive an error about this when running the script. If that is the case, then you should
make sure that you manually launch IE at least once and complete the setup.
Commandline mode
----------------
Note however that, if you are running the script elevated, you can work around the above annoyance by using the
`-DisableFirstRunCustomize` option which basically __temporarily__ creates a key of the same name in the registry __if__
it doesn't already exist, to bypass the first time setup error.
Fido supports commandline mode whereas, whenever one of the following options is provided, a GUI is not instantiated
and you can instead generate the ISO download from within a PowerShell console or script.
Note however that, as of 2023.05, Microsoft has removed access to older releases of Windows ISOs and as a result, the
list of releases that can be downloaded from Fido has had to be reduced to only the latest for each version.
The options are:
- `Win`: Specify Windows version (e.g. _"Windows 10"_). Abbreviated version should work as well (e.g `-Win 10`) as long
as it is unique enough. If this option isn't specified, the most recent version of Windows is automatically selected.
You can obtain a list of supported versions by specifying `-Win List`.
- `Rel`: Specify Windows release (e.g. _"21H1"_). If this option isn't specified, the most recent release for the chosen
version of Windows is automatically selected. You can also use `-Rel Latest` to force the most recent to be used.
You can obtain a list of supported versions by specifying `-Rel List`.
- `Ed`: Specify Windows edition (e.g. _"Pro/Home"_). Abbreviated editions should work as well (e.g `-Ed Pro`) as long
as it is unique enough. If this option isn't specified, the most recent version of Windows is automatically selected.
You can obtain a list of supported versions by specifying `-Ed List`.
- `Lang`: Specify Windows language (e.g. _"Arabic"_). Abbreviated or part of a language (e.g. `-Lang Int` for
`English International`) should work as long as it's unique enough. If this option isn't specified, the script attempts
to select the same language as the system locale.
You can obtain a list of supported languages by specifying `-Lang List`.
- `Arch`: Specify Windows architecture (e.g. _"x64"_). If this option isn't specified, the script attempts to use the same
architecture as the one from the current system.
- `GetUrl`: By default, the script attempts to automatically launch the download. But when using the `-GetUrl` switch,
the script only displays the download URL, which can then be piped into another command or into a file.
Examples of a commandline download:
```
PS C:\Projects\Fido> .\Fido.ps1 -Win 10
No release specified (-Rel). Defaulting to '21H1 (Build 19043.985 - 2021.05)'.
No edition specified (-Ed). Defaulting to 'Windows 10 Home/Pro'.
No language specified (-Lang). Defaulting to 'English International'.
No architecture specified (-Arch). Defaulting to 'x64'.
Selected: Windows 10 21H1 (Build 19043.985 - 2021.05), Home/Pro, English International, x64
Downloading 'Win10_21H1_EnglishInternational_x64.iso' (5.0 GB)...
PS C:\Projects\Fido> .\Fido.ps1 -Win 10 -Rel List
Please select a Windows Release (-Rel) for Windows 10 (or use 'Latest' for most recent):
- 21H1 (Build 19043.985 - 2021.05)
- 20H2 (Build 19042.631 - 2020.12)
- 20H2 (Build 19042.508 - 2020.10)
- 20H1 (Build 19041.264 - 2020.05)
- 19H2 (Build 18363.418 - 2019.11)
- 19H1 (Build 18362.356 - 2019.09)
- 19H1 (Build 18362.30 - 2019.05)
- 1809 R2 (Build 17763.107 - 2018.10)
- 1809 R1 (Build 17763.1 - 2018.09)
- 1803 (Build 17134.1 - 2018.04)
- 1709 (Build 16299.15 - 2017.09)
- 1703 [Redstone 2] (Build 15063.0 - 2017.03)
- 1607 [Redstone 1] (Build 14393.0 - 2016.07)
- 1511 R3 [Threshold 2] (Build 10586.164 - 2016.04)
- 1511 R2 [Threshold 2] (Build 10586.104 - 2016.02)
- 1511 R1 [Threshold 2] (Build 10586.0 - 2015.11)
- 1507 [Threshold 1] (Build 10240.16384 - 2015.07)
PS C:\Projects\Fido> .\Fido.ps1 -Win 10 -Rel 20H2 -Ed Edu -Lang Fre -Arch x86 -GetUrl
https://software-download.microsoft.com/db/Win10_Edu_20H2_v2_French_x32.iso?t=c48b32d3-4cf3-46f3-a8ad-6dd9568ff4eb&e=1629113408&h=659cdd60399584c5dc1d267957924fbd
```
Additional Notes
----------------
Because of its intended usage with Rufus, this script is not designed to cover every possible retail ISO downloads.
Instead we mostly chose the ones that the general public is likely to request. For instance, we currently have no plan
to add support for LTSB/LTSC Windows 10 ISOs downloads.
to add support for LTSB/LTSC Windows ISOs downloads.
If you are interested in such downloads, then you are kindly invited to visit the relevant download pages from Microsoft
such as [this one](https://www.microsoft.com/evalcenter/evaluate-windows-10-enterprise) for LTSC versions.

View File

@@ -20,6 +20,8 @@ sign_file() {
fi
}
# Update the Authenticode signature
MSYS2_ARG_CONV_EXCL='*' "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\signtool" sign /v /sha1 3dbc3a2a0e9ce8803b422cfdbc60acd33164965d /fd SHA256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td SHA256 Fido.ps1
read -s -p "Enter pass phrase for `realpath $PRIVATE_KEY`: " PASSWORD
echo
# Confirm that the pass phrase is valid by trying to sign a dummy file