mirror of
https://github.com/pbatard/Fido.git
synced 2025-09-16 14:18:02 +02:00
Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ee0393cb74 | ||
![]() |
a8abb94a16 | ||
![]() |
15a48fe24f | ||
![]() |
e0c1015ade | ||
![]() |
46c399ecd7 | ||
![]() |
445ca5c074 | ||
![]() |
037cd1ad9b | ||
![]() |
aa378cad13 | ||
![]() |
3c4fafa207 |
8
.whitesource
Normal file
8
.whitesource
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"checkRunSettings": {
|
||||||
|
"vulnerableCheckRunConclusionLevel": "failure"
|
||||||
|
},
|
||||||
|
"issueSettings": {
|
||||||
|
"minSeverityLevel": "LOW"
|
||||||
|
}
|
||||||
|
}
|
72
Fido.ps1
72
Fido.ps1
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Fido v1.13 - Retail Windows ISO Downloader
|
# Fido v1.18 - Retail Windows ISO Downloader
|
||||||
# Copyright © 2019 Pete Batard <pete@akeo.ie>
|
# Copyright © 2019-2021 Pete Batard <pete@akeo.ie>
|
||||||
# ConvertTo-ImageSource: Copyright © 2016 Chris Carter
|
# ConvertTo-ImageSource: Copyright © 2016 Chris Carter
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
@@ -63,7 +63,11 @@ $code = @"
|
|||||||
}
|
}
|
||||||
"@
|
"@
|
||||||
|
|
||||||
Add-Type -MemberDefinition $code -Namespace Gui -UsingNamespace "System.IO", "System.Text", "System.Drawing", "System.Globalization" -ReferencedAssemblies System.Drawing -Name Utils -ErrorAction Stop
|
if ($host.version -ge "7.0") {
|
||||||
|
Add-Type -MemberDefinition $code -Namespace Gui -UsingNamespace System.Runtime, System.IO, System.Text, System.Drawing, System.Globalization -ReferencedAssemblies System.Drawing.Common -Name Utils -ErrorAction Stop
|
||||||
|
} 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 -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
|
||||||
@@ -75,6 +79,30 @@ $ko = 0x20000
|
|||||||
$WindowsVersions = @(
|
$WindowsVersions = @(
|
||||||
@(
|
@(
|
||||||
@("Windows 10", "Windows10ISO"),
|
@("Windows 10", "Windows10ISO"),
|
||||||
|
@(
|
||||||
|
"20H2 (Build 19042.631 - 2020.12)",
|
||||||
|
@("Windows 10 Home/Pro", 1882),
|
||||||
|
@("Windows 10 Education", 1884),
|
||||||
|
@("Windows 10 Home China ", ($zh + 1883))
|
||||||
|
),
|
||||||
|
@(
|
||||||
|
"20H2 (Build 19042.508 - 2020.10)",
|
||||||
|
@("Windows 10 Home/Pro", 1807),
|
||||||
|
@("Windows 10 Education", 1805),
|
||||||
|
@("Windows 10 Home China ", ($zh + 1806))
|
||||||
|
),
|
||||||
|
@(
|
||||||
|
"20H1 (Build 19041.264 - 2020.05)",
|
||||||
|
@("Windows 10 Home/Pro", 1626),
|
||||||
|
@("Windows 10 Education", 1625),
|
||||||
|
@("Windows 10 Home China ", ($zh + 1627))
|
||||||
|
),
|
||||||
|
@(
|
||||||
|
"19H2 (Build 18363.418 - 2019.11)",
|
||||||
|
@("Windows 10 Home/Pro", 1429),
|
||||||
|
@("Windows 10 Education", 1431),
|
||||||
|
@("Windows 10 Home China ", ($zh + 1430))
|
||||||
|
),
|
||||||
@(
|
@(
|
||||||
"19H1 (Build 18362.356 - 2019.09)",
|
"19H1 (Build 18362.356 - 2019.09)",
|
||||||
@("Windows 10 Home/Pro", 1384),
|
@("Windows 10 Home/Pro", 1384),
|
||||||
@@ -204,10 +232,10 @@ function Select-Language([string]$LangName)
|
|||||||
($SysLocale.StartsWith("da") -and $LangName -like "*Danish*") -or `
|
($SysLocale.StartsWith("da") -and $LangName -like "*Danish*") -or `
|
||||||
($SysLocale.StartsWith("nl") -and $LangName -like "*Dutch*") -or `
|
($SysLocale.StartsWith("nl") -and $LangName -like "*Dutch*") -or `
|
||||||
($SysLocale -eq "en-US" -and $LangName -eq "English") -or `
|
($SysLocale -eq "en-US" -and $LangName -eq "English") -or `
|
||||||
($SysLocale.StartsWith("en") -and $LangName -like "*English*" -and $LangName -like "*inter*") -or `
|
($SysLocale.StartsWith("en") -and $LangName -like "*English*" -and ($LangName -like "*inter*" -or $LangName -like "*ingdom*")) -or `
|
||||||
($SysLocale.StartsWith("et") -and $LangName -like "*Eston*") -or `
|
($SysLocale.StartsWith("et") -and $LangName -like "*Eston*") -or `
|
||||||
($SysLocale.StartsWith("fi") -and $LangName -like "*Finn*") -or `
|
($SysLocale.StartsWith("fi") -and $LangName -like "*Finn*") -or `
|
||||||
($SysLocale -eq "fr-CA" -and $LangName -like "*French*" -and $LangName -like "*Canad*") -or `
|
($SysLocale -eq "fr-CA" -and $LangName -like "*French*" -and $LangName -like "*Canad*") -or `
|
||||||
($SysLocale.StartsWith("fr") -and $LangName -eq "French") -or `
|
($SysLocale.StartsWith("fr") -and $LangName -eq "French") -or `
|
||||||
($SysLocale.StartsWith("de") -and $LangName -like "*German*") -or `
|
($SysLocale.StartsWith("de") -and $LangName -like "*German*") -or `
|
||||||
($SysLocale.StartsWith("el") -and $LangName -like "*Greek*") -or `
|
($SysLocale.StartsWith("el") -and $LangName -like "*Greek*") -or `
|
||||||
@@ -379,12 +407,9 @@ function Error([string]$ErrorMessage)
|
|||||||
Write-Host Error: $ErrorMessage
|
Write-Host Error: $ErrorMessage
|
||||||
$XMLForm.Title = $(Get-Translation("Error")) + ": " + $ErrorMessage
|
$XMLForm.Title = $(Get-Translation("Error")) + ": " + $ErrorMessage
|
||||||
Refresh-Control($XMLForm)
|
Refresh-Control($XMLForm)
|
||||||
$Continue.Content = Get-Translation("Close")
|
$XMLGrid.Children[2 * $script:Stage + 1].IsEnabled = $True
|
||||||
Refresh-Control($Continue)
|
|
||||||
$UserInput = [System.Windows.MessageBox]::Show($XMLForm.Title, $(Get-Translation("Error")), "OK", "Error")
|
$UserInput = [System.Windows.MessageBox]::Show($XMLForm.Title, $(Get-Translation("Error")), "OK", "Error")
|
||||||
$script:ExitCode = $Stage
|
$script:ExitCode = $script:Stage--
|
||||||
$script:Stage = -1
|
|
||||||
$Continue.IsEnabled = $True
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Get-RandomDate()
|
function Get-RandomDate()
|
||||||
@@ -502,11 +527,7 @@ $WindowsVersion.DisplayMemberPath = "Version"
|
|||||||
|
|
||||||
# Button Action
|
# Button Action
|
||||||
$Continue.add_click({
|
$Continue.add_click({
|
||||||
if ($script:Stage++ -lt 0) {
|
$script:Stage++
|
||||||
Get-Process -Id $pid | Foreach-Object { $_.CloseMainWindow() | Out-Null }
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
$XMLGrid.Children[2 * $Stage + 1].IsEnabled = $False
|
$XMLGrid.Children[2 * $Stage + 1].IsEnabled = $False
|
||||||
$Continue.IsEnabled = $False
|
$Continue.IsEnabled = $False
|
||||||
$Back.IsEnabled = $False
|
$Back.IsEnabled = $False
|
||||||
@@ -571,10 +592,14 @@ $Continue.add_click({
|
|||||||
$i = 0
|
$i = 0
|
||||||
$SelectedIndex = 0
|
$SelectedIndex = 0
|
||||||
try {
|
try {
|
||||||
$r = Invoke-WebRequest -UserAgent $UserAgent -WebSession $Session $url
|
$r = Invoke-WebRequest -UserAgent $UserAgent -SessionVariable "Session" $url
|
||||||
# Go through an XML conversion to keep all PowerShells happy...
|
# Go through an XML conversion to keep all PowerShells happy...
|
||||||
if (-not $($r.AllElements | ? {$_.id -eq "product-languages"})) {
|
if (-not $($r.AllElements | ? {$_.id -eq "product-languages"})) {
|
||||||
throw "Unexpected server response"
|
if ($host.version -ge "7.0") {
|
||||||
|
throw "This PowerShell version can not parse HTML"
|
||||||
|
} else {
|
||||||
|
throw "Unexpected server response"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$html = $($r.AllElements | ? {$_.id -eq "product-languages"}).InnerHTML
|
$html = $($r.AllElements | ? {$_.id -eq "product-languages"}).InnerHTML
|
||||||
$html = $html.Replace("selected value", "value")
|
$html = $html.Replace("selected value", "value")
|
||||||
@@ -596,7 +621,7 @@ $Continue.add_click({
|
|||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
Error($_.Exception.Message)
|
Error($_.Exception.Message)
|
||||||
return
|
break
|
||||||
}
|
}
|
||||||
$script:Language = Add-Entry $Stage "Language" $array "DisplayLanguage"
|
$script:Language = Add-Entry $Stage "Language" $array "DisplayLanguage"
|
||||||
$Language.SelectedIndex = $SelectedIndex
|
$Language.SelectedIndex = $SelectedIndex
|
||||||
@@ -631,6 +656,7 @@ $Continue.add_click({
|
|||||||
$html = $html.Replace("class=product-download-hidden", "")
|
$html = $html.Replace("class=product-download-hidden", "")
|
||||||
$html = $html.Replace("type=hidden", "")
|
$html = $html.Replace("type=hidden", "")
|
||||||
$html = $html.Replace(">", "/>")
|
$html = $html.Replace(">", "/>")
|
||||||
|
$html = $html.Replace(" ", " ")
|
||||||
$html = $html.Replace("IsoX86", """x86""")
|
$html = $html.Replace("IsoX86", """x86""")
|
||||||
$html = $html.Replace("IsoX64", """x64""")
|
$html = $html.Replace("IsoX64", """x64""")
|
||||||
$html = "<inputs>" + $html + "</inputs>"
|
$html = "<inputs>" + $html + "</inputs>"
|
||||||
@@ -646,11 +672,11 @@ $Continue.add_click({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($array.Length -eq 0) {
|
if ($array.Length -eq 0) {
|
||||||
Throw-Error -Req $r -Alt "Could not retreive ISO download links"
|
Throw-Error -Req $r -Alt "Could not retrieve ISO download links"
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
Error($_.Exception.Message)
|
Error($_.Exception.Message)
|
||||||
return
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
$script:Arch = Add-Entry $Stage "Architecture" $array "Type"
|
$script:Arch = Add-Entry $Stage "Architecture" $array "Type"
|
||||||
@@ -687,7 +713,7 @@ $Continue.add_click({
|
|||||||
}
|
}
|
||||||
$Continue.IsEnabled = $True
|
$Continue.IsEnabled = $True
|
||||||
if ($Stage -ge 0) {
|
if ($Stage -ge 0) {
|
||||||
$Back.IsEnabled = $True;
|
$Back.IsEnabled = $True
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -711,10 +737,12 @@ $Back.add_click({
|
|||||||
$Margin.Top -= $dh2
|
$Margin.Top -= $dh2
|
||||||
$Back.Margin = $Margin
|
$Back.Margin = $Margin
|
||||||
$script:Stage = $Stage - 1
|
$script:Stage = $Stage - 1
|
||||||
|
$XMLForm.Title = $AppTitle
|
||||||
if ($Stage -eq 0) {
|
if ($Stage -eq 0) {
|
||||||
$Back.Content = Get-Translation("Close")
|
$Back.Content = Get-Translation("Close")
|
||||||
} elseif ($Stage -eq 3) {
|
} else {
|
||||||
$Continue.Content = Get-Translation("Continue")
|
$Continue.Content = Get-Translation("Continue")
|
||||||
|
Refresh-Control($Continue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user