mirror of
https://github.com/pbatard/Fido.git
synced 2025-09-16 14:18:02 +02:00
Initial commit
This commit is contained in:
212
DealBreaker.ps1
Normal file
212
DealBreaker.ps1
Normal file
@@ -0,0 +1,212 @@
|
||||
#
|
||||
# DealBreaker - Windows retail ISO download link generator
|
||||
# Copyright © 2019 Pete Batard <pete@akeo.ie>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# Load Assembly and Library
|
||||
Add-Type -AssemblyName PresentationFramework
|
||||
|
||||
# Input parameters
|
||||
$Language = "en-US"
|
||||
|
||||
# Data
|
||||
$WindowsVersions = @(
|
||||
@(
|
||||
"Windows 10",
|
||||
@(
|
||||
"1809 R2",
|
||||
@("Windows 10 Home/Pro", 1060),
|
||||
@("Windows 10 Education", 1056)
|
||||
),
|
||||
@(
|
||||
"1809 R1",
|
||||
@("Windows 10 Home/Pro", 1019),
|
||||
@("Windows 10 Education", 1021)
|
||||
),
|
||||
@(
|
||||
"1803",
|
||||
@("Windows 10 Home/Pro", 651),
|
||||
@("Windows 10 Education", 655),
|
||||
@("Windows 10 Enterprise Eval", 629)
|
||||
)
|
||||
),
|
||||
@(
|
||||
"Windows 8.1",
|
||||
@(
|
||||
"Full",
|
||||
@("Windows 8.1/Windows 8.1 Pro", 52),
|
||||
@("Windows 8.1 Single Language", 48)
|
||||
),
|
||||
@(
|
||||
"N",
|
||||
@("Windows 8.1/Windows 8.1 Pro N", 55)
|
||||
)
|
||||
),
|
||||
@(
|
||||
"Windows 7",
|
||||
@(
|
||||
"SP1",
|
||||
@("Windows 7 Ultimate", 8),
|
||||
@("Windows 7 Pro", 4),
|
||||
@("Windows 7 Home Premium", 6),
|
||||
@("Windows 7 Home Basic", 2)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
# Functions
|
||||
function Add-Title([string]$Name)
|
||||
{
|
||||
$Title = New-Object System.Windows.Controls.TextBlock
|
||||
$Title.FontSize = $WindowsVersionTitle.FontSize
|
||||
$Title.Height = $WindowsVersionTitle.Height;
|
||||
$Title.Width = $WindowsVersionTitle.Width;
|
||||
$Title.HorizontalAlignment = "Left"
|
||||
$Title.VerticalAlignment = "Top"
|
||||
$Margin = $WindowsVersionTitle.Margin
|
||||
$Margin.Top += $global:stage * $dh
|
||||
$Title.Margin = $Margin
|
||||
$Title.Text = $Name
|
||||
return $Title
|
||||
}
|
||||
|
||||
function Add-Combo
|
||||
{
|
||||
$Combo = New-Object System.Windows.Controls.ComboBox
|
||||
$Combo.FontSize = $WindowsVersion.FontSize
|
||||
$Combo.Height = $WindowsVersion.Height;
|
||||
$Combo.Width = $WindowsVersion.Width;
|
||||
$Combo.HorizontalAlignment = "Left"
|
||||
$Combo.VerticalAlignment = "Top"
|
||||
$Margin = $WindowsVersion.Margin
|
||||
$Margin.Top += $global:stage * $dh
|
||||
$Combo.Margin = $Margin
|
||||
$Combo.SelectedIndex = 0
|
||||
return $Combo
|
||||
}
|
||||
|
||||
# Form
|
||||
[xml]$Form = @"
|
||||
<!-- TODO: use relative extracted icon -->
|
||||
<!-- TODO: Add FlowDirection = "RightToLeft" tp <Window> for RTL mode -->
|
||||
<Window xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" Title = "Windows ISO Download" Height = "162" Width = "380" ResizeMode = "NoResize" Icon="C:/rufus/res/icons/rufus.ico">
|
||||
<Grid Name = "Grid">
|
||||
<TextBlock Name = "WindowsVersionTitle" FontSize = "16" Width="340" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="16,8,0,0" Text="Windows Version"/>
|
||||
<ComboBox Name = "WindowsVersion" FontSize = "14" Height = "24" Width = "340" HorizontalAlignment = "Left" VerticalAlignment="Top" Margin = "14,34,0,0" SelectedIndex = "0"/>
|
||||
<Button Name = "Confirm" FontSize = "16" Content = "Confirm" Height = "26" Width = "160" HorizontalAlignment = "Left" VerticalAlignment = "Top" Margin = "14,78,0,0"/>
|
||||
</Grid>
|
||||
</Window>
|
||||
"@
|
||||
|
||||
$XMLReader = (New-Object System.Xml.XmlNodeReader $Form)
|
||||
$XMLForm = [Windows.Markup.XamlReader]::Load($XMLReader)
|
||||
$XMLGrid = $XMLForm.FindName("Grid")
|
||||
$Confirm = $XMLForm.FindName('Confirm')
|
||||
|
||||
# Fill in the first dropdown
|
||||
$WindowsVersionTitle = $XMLForm.FindName('WindowsVersionTitle')
|
||||
$WindowsVersion = $XMLForm.FindName('WindowsVersion')
|
||||
foreach($Version in $WindowsVersions) {
|
||||
$null = $WindowsVersion.Items.Add($Version[0])
|
||||
}
|
||||
$VersionIndex = 0
|
||||
$ReleaseIndex = 0
|
||||
$Sku = 0
|
||||
$Stage = 0
|
||||
$dh = 58;
|
||||
|
||||
# Button Action
|
||||
$Confirm.add_click({
|
||||
if ($Stage -gt 4) {
|
||||
return
|
||||
}
|
||||
$script:Stage++
|
||||
|
||||
if ($Stage -lt 5) {
|
||||
$XMLForm.Height += $dh;
|
||||
$Margin = $Confirm.Margin
|
||||
$Margin.Top += $dh
|
||||
$Confirm.Margin = $Margin
|
||||
}
|
||||
|
||||
switch ($Stage) {
|
||||
1 {
|
||||
$WindowsReleaseTitle = Add-Title($WindowsVersion.SelectedItem + " Release")
|
||||
$script:WindowsRelease = Add-Combo
|
||||
for ($i = 0; $i -lt $WindowsVersions.Length; $i++) {
|
||||
if ($WindowsVersions[$i][0] -eq $WindowsVersion.SelectedItem) {
|
||||
$script:VersionIndex = $i
|
||||
}
|
||||
}
|
||||
for($i = 1; $i -lt $WindowsVersions[$VersionIndex].Length; $i++) {
|
||||
$WindowsRelease.Items.Add($WindowsVersions[$VersionIndex][$i][0])
|
||||
}
|
||||
$WindowsVersion.IsEnabled = $False;
|
||||
$XMLGrid.AddChild($WindowsReleaseTitle)
|
||||
$XMLGrid.AddChild($WindowsRelease)
|
||||
}
|
||||
2 {
|
||||
$ProductEditionTitle = Add-Title("Edition")
|
||||
$script:ProductEdition = Add-Combo
|
||||
for ($i = 1; $i -lt $WindowsVersions[$VersionIndex].Length; $i++) {
|
||||
if ($WindowsVersions[$VersionIndex][$i][0] -eq $WindowsRelease.SelectedItem) {
|
||||
$script:ReleaseIndex = $i
|
||||
}
|
||||
}
|
||||
for($i = 1; $i -lt $WindowsVersions[$VersionIndex][$ReleaseIndex].Length; $i++) {
|
||||
# Yeah, none of the examples to associate a value to a ComboBox entry in PS *actually* work
|
||||
$ProductEdition.Items.Add($WindowsVersions[$VersionIndex][$ReleaseIndex][$i][0])
|
||||
}
|
||||
$WindowsRelease.IsEnabled = $False
|
||||
$XMLGrid.AddChild($ProductEditionTitle)
|
||||
$XMLGrid.AddChild($ProductEdition)
|
||||
}
|
||||
3 {
|
||||
$LanguageTitle = Add-Title("Language")
|
||||
$script:Language = Add-Combo
|
||||
# At last, we can get the SKU
|
||||
for ($i = 1; $i -lt $WindowsVersions[$VersionIndex][$ReleaseIndex].Length; $i++) {
|
||||
if ($WindowsVersions[$VersionIndex][$ReleaseIndex][$i][0] -eq $ProductEdition.SelectedItem) {
|
||||
$script:Sku = $WindowsVersions[$VersionIndex][$ReleaseIndex][$i][1]
|
||||
Write-Host "SKU: $Sku"
|
||||
}
|
||||
}
|
||||
$Language.Items.Add("English")
|
||||
$Language.Items.Add("German")
|
||||
$Language.Items.Add("French")
|
||||
$ProductEdition.IsEnabled = $False
|
||||
$XMLGrid.AddChild($LanguageTitle)
|
||||
$XMLGrid.AddChild($Language)
|
||||
}
|
||||
4 {
|
||||
$ArchTitle = Add-Title("Architecture")
|
||||
$script:Arch = Add-Combo
|
||||
$Arch.Items.add("x64")
|
||||
$Arch.Items.add("x86")
|
||||
$Language.IsEnabled = $False
|
||||
$XMLGrid.AddChild($ArchTitle)
|
||||
$XMLGrid.AddChild($Arch)
|
||||
$Confirm.Content = "Download"
|
||||
}
|
||||
5 {
|
||||
$Arch.IsEnabled = $False
|
||||
$Confirm.IsEnabled = $False
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
# Show XMLform
|
||||
$null = $XMLForm.ShowDialog()
|
35
DealBreaker.pssproj
Normal file
35
DealBreaker.pssproj
Normal file
@@ -0,0 +1,35 @@
|
||||
<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>MyApplication</RootNamespace>
|
||||
<AssemblyName>MyApplication</AssemblyName>
|
||||
<Name>DealBreaker</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="DealBreaker.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>
|
25
DealBreaker.sln
Normal file
25
DealBreaker.sln
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
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}") = "DealBreaker", "DealBreaker.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
|
Reference in New Issue
Block a user