This commit is contained in:
rbalsleyMSFT
2025-02-07 17:05:48 -08:00
committed by rbalsleyMSFT
parent f121505c50
commit ebcfa4f9dc
2 changed files with 106 additions and 73 deletions
+10
View File
@@ -18,6 +18,7 @@ $defaultWindowsSKU = "Pro"
$defaultMediaType = "Consumer" # updated value $defaultMediaType = "Consumer" # updated value
$defaultOptionalFeatures = "" $defaultOptionalFeatures = ""
$defaultProductKey = "" $defaultProductKey = ""
$defaultFFUPrefix = "_FFU" # <-- new default for VM Name Prefix
# Large list from the ValidateSet in BuildFFUVM.ps1 ($OptionalFeatures parameter) # Large list from the ValidateSet in BuildFFUVM.ps1 ($OptionalFeatures parameter)
$allowedFeatures = @( $allowedFeatures = @(
@@ -138,6 +139,9 @@ function Get-UIConfig {
$logicalSectorObj = $window.FindName('cmbLogicalSectorSize').SelectedItem $logicalSectorObj = $window.FindName('cmbLogicalSectorSize').SelectedItem
$logicalSectorSize = [int]$logicalSectorObj.Content $logicalSectorSize = [int]$logicalSectorObj.Content
# <-- NEW: retrieve FFUPrefix from the new textbox (VM Name Prefix)
$ffuPrefix = $window.FindName('txtVMNamePrefix').Text
# --- Windows Settings tab --- # --- Windows Settings tab ---
$wrItem = $window.FindName('cmbWindowsRelease').SelectedItem $wrItem = $window.FindName('cmbWindowsRelease').SelectedItem
$windowsRelease = if ($wrItem -and $wrItem.Value) { [int]$wrItem.Value } else { 10 } $windowsRelease = if ($wrItem -and $wrItem.Value) { [int]$wrItem.Value } else { 10 }
@@ -198,6 +202,7 @@ function Get-UIConfig {
EnablePromptExternalHardDiskMedia = $promptExt EnablePromptExternalHardDiskMedia = $promptExt
FFUCaptureLocation = $ffuCaptureLocation FFUCaptureLocation = $ffuCaptureLocation
FFUDevelopmentPath = $ffuDevPath FFUDevelopmentPath = $ffuDevPath
ISOPath = $isoPath # <-- NEW: Add Windows ISO Path to config
MediaType = $mediaType MediaType = $mediaType
Make = $make Make = $make
Model = $model Model = $model
@@ -225,6 +230,7 @@ function Get-UIConfig {
WindowsRelease = $windowsRelease WindowsRelease = $windowsRelease
WindowsSKU = $windowsSKU WindowsSKU = $windowsSKU
WindowsVersion = $windowsVersion WindowsVersion = $windowsVersion
FFUPrefix = $ffuPrefix # <-- new option for VM Name Prefix
} }
# Sort the configuration hashtable alphabetically by key # Sort the configuration hashtable alphabetically by key
@@ -412,6 +418,8 @@ $window.Add_Loaded({
$window.FindName('txtUsername').Text = "ffu_user" $window.FindName('txtUsername').Text = "ffu_user"
# Set VM Location default to $FFUDevelopmentPath\VM # Set VM Location default to $FFUDevelopmentPath\VM
$window.FindName('txtVMLocation').Text = (Join-Path $FFUDevelopmentPath "VM") $window.FindName('txtVMLocation').Text = (Join-Path $FFUDevelopmentPath "VM")
# <-- NEW: Set the default for the new VM Name Prefix textbox on the Hyper-V Settings tab
$window.FindName('txtVMNamePrefix').Text = $defaultFFUPrefix
# Hyper-V Settings: Populate defaults (Share Name and Username now on Build, so only populate remaining fields) # Hyper-V Settings: Populate defaults (Share Name and Username now on Build, so only populate remaining fields)
$script:vmSwitchMap = @{} $script:vmSwitchMap = @{}
$script:allSwitches = Get-VMSwitch -ErrorAction SilentlyContinue $script:allSwitches = Get-VMSwitch -ErrorAction SilentlyContinue
@@ -688,6 +696,8 @@ $btnLoadConfig.Add_Click({
$window.FindName('txtMemory').Text = $configContent.Memory / 1GB $window.FindName('txtMemory').Text = $configContent.Memory / 1GB
$window.FindName('txtProcessors').Text = $configContent.Processors $window.FindName('txtProcessors').Text = $configContent.Processors
$window.FindName('txtVMLocation').Text = $configContent.VMLocation $window.FindName('txtVMLocation').Text = $configContent.VMLocation
# <-- NEW: Update the VM Name Prefix textbox value during config load
$window.FindName('txtVMNamePrefix').Text = $configContent.FFUPrefix
$window.FindName('cmbLogicalSectorSize').SelectedItem = $configContent.LogicalSectorSizeBytes $window.FindName('cmbLogicalSectorSize').SelectedItem = $configContent.LogicalSectorSizeBytes
# Windows Settings # Windows Settings
$window.FindName('txtISOPath').Text = $configContent.ISOPath $window.FindName('txtISOPath').Text = $configContent.ISOPath
+96 -73
View File
@@ -146,8 +146,8 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="FFU Development Path" VerticalAlignment="Center" ToolTip="Specifies the folder used for FFU development."/> <TextBlock Grid.Column="0" Text="FFU Development Path" VerticalAlignment="Center" ToolTip="Path to the FFU development folder."/>
<TextBox x:Name="txtFFUDevPath" Grid.Column="1" Margin="5" VerticalAlignment="Center" ToolTip="Browse for FFU development folder."/> <TextBox x:Name="txtFFUDevPath" Grid.Column="1" Margin="5" VerticalAlignment="Center" ToolTip="Path to the FFU development folder."/>
<Button x:Name="btnBrowseFFUDevPath" Grid.Column="2" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center"/> <Button x:Name="btnBrowseFFUDevPath" Grid.Column="2" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center"/>
</Grid> </Grid>
<!-- Row 2: Custom FFU Name Template --> <!-- Row 2: Custom FFU Name Template -->
@@ -156,8 +156,8 @@
<ColumnDefinition Width="200"/> <ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Custom FFU Name Template" VerticalAlignment="Center" ToolTip="Set the naming template for FFU builds (e.g., {WindowsRelease}_{WindowsVersion}_{SKU}_{yyyy}-{MM}-{dd}_{HH}{mm})."/> <TextBlock Grid.Column="0" Text="Custom FFU Name Template" VerticalAlignment="Center" ToolTip="Sets a custom FFU output name with placeholders. Allowed placeholders are: {WindowsRelease}, {WindowsVersion}, {SKU}, {BuildDate}, {yyyy}, {MM}, {dd}, {H}, {hh}, {mm}, {tt}."/>
<TextBox x:Name="txtCustomFFUNameTemplate" Grid.Column="1" Margin="5" VerticalAlignment="Center" ToolTip="Set the naming template for FFU builds (e.g., {WindowsRelease}_{WindowsVersion}_{SKU}_{yyyy}-{MM}-{dd}_{HH}{mm})."/> <TextBox x:Name="txtCustomFFUNameTemplate" Grid.Column="1" Margin="5" VerticalAlignment="Center" ToolTip="Sets a custom FFU output name with placeholders. Allowed placeholders are: {WindowsRelease}, {WindowsVersion}, {SKU}, {BuildDate}, {yyyy}, {MM}, {dd}, {H}, {hh}, {mm}, {tt}."/>
</Grid> </Grid>
<!-- Row 3: FFU Capture Location --> <!-- Row 3: FFU Capture Location -->
<Grid Grid.Row="3" Margin="0,5"> <Grid Grid.Row="3" Margin="0,5">
@@ -166,8 +166,8 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="FFU Capture Location" VerticalAlignment="Center" ToolTip="Defines where the FFU capture file will be saved."/> <TextBlock Grid.Column="0" Text="FFU Capture Location" VerticalAlignment="Center" ToolTip="Path to the folder where the captured FFU will be stored."/>
<TextBox x:Name="txtFFUCaptureLocation" Grid.Column="1" Margin="5" VerticalAlignment="Center" ToolTip="Browse for FFU capture location."/> <TextBox x:Name="txtFFUCaptureLocation" Grid.Column="1" Margin="5" VerticalAlignment="Center" ToolTip="Path to the folder where the captured FFU will be stored."/>
<Button x:Name="btnBrowseFFUCaptureLocation" Grid.Column="2" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center"/> <Button x:Name="btnBrowseFFUCaptureLocation" Grid.Column="2" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center"/>
</Grid> </Grid>
<!-- Row 4: Share Name --> <!-- Row 4: Share Name -->
@@ -176,8 +176,8 @@
<ColumnDefinition Width="200"/> <ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Share Name" VerticalAlignment="Center" ToolTip="Name of the share used for FFU capture."/> <TextBlock Grid.Column="0" Text="Share Name" VerticalAlignment="Center" ToolTip="Name of the shared folder for FFU capture. The default is FFUCaptureShare. This share will be created with rights for the user account. When finished, the share will be removed."/>
<TextBox x:Name="txtShareName" Grid.Column="1" Margin="5" VerticalAlignment="Center" ToolTip="Name of the share used for FFU capture."/> <TextBox x:Name="txtShareName" Grid.Column="1" Margin="5" VerticalAlignment="Center" ToolTip="Name of the shared folder for FFU capture. The default is FFUCaptureShare. This share will be created with rights for the user account. When finished, the share will be removed."/>
</Grid> </Grid>
<!-- Row 5: Username --> <!-- Row 5: Username -->
<Grid Grid.Row="5" Margin="0,5"> <Grid Grid.Row="5" Margin="0,5">
@@ -185,17 +185,17 @@
<ColumnDefinition Width="200"/> <ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Username" VerticalAlignment="Center" ToolTip="The username to be used for FFU build operations."/> <TextBlock Grid.Column="0" Text="Username" VerticalAlignment="Center" ToolTip="Username for accessing the shared folder. The default is ffu_user. The script will auto-create the account and password. When finished, it will remove the account."/>
<TextBox x:Name="txtUsername" Grid.Column="1" Margin="5" VerticalAlignment="Center" ToolTip="The username to be used for FFU build operations."/> <TextBox x:Name="txtUsername" Grid.Column="1" Margin="5" VerticalAlignment="Center" ToolTip="Username for accessing the shared folder. The default is ffu_user. The script will auto-create the account and password. When finished, it will remove the account."/>
</Grid> </Grid>
<!-- Row 6: General Build Options Header --> <!-- Row 6: General Build Options Header -->
<TextBlock Grid.Row="6" Text="General Build Options" FontWeight="Bold" FontSize="16" Margin="0,10,0,5"/> <TextBlock Grid.Row="6" Text="General Build Options" FontWeight="Bold" FontSize="16" Margin="0,10,0,5"/>
<!-- Row 7: General Build Options Checkboxes --> <!-- Row 7: General Build Options Checkboxes -->
<WrapPanel Grid.Row="7" Margin="0,5"> <WrapPanel Grid.Row="7" Margin="0,5">
<CheckBox x:Name="chkCompactOS" Content="Compact OS" Margin="5" VerticalAlignment="Center" ToolTip="Enable to perform a compact installation of Windows."/> <CheckBox x:Name="chkCompactOS" Content="Compact OS" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will compact the OS when building the FFU. Default is $true."/>
<CheckBox x:Name="chkOptimize" Content="Optimize" Margin="5" VerticalAlignment="Center" ToolTip="Enable to optimize system performance during Windows build."/> <CheckBox x:Name="chkOptimize" Content="Optimize" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will optimize the FFU file. Default is $true."/>
<CheckBox x:Name="chkCreateCaptureMedia" Content="Create Capture Media" Margin="5" VerticalAlignment="Center" ToolTip="Create capture media for FFU."/> <CheckBox x:Name="chkCreateCaptureMedia" Content="Create Capture Media" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, this will create WinPE capture media for use when $InstallApps is set to $true. This capture media will be automatically attached to the VM, and the boot order will be changed to automate the capture of the FFU."/>
<CheckBox x:Name="chkCreateDeploymentMedia" Content="Create Deployment Media" Margin="5" VerticalAlignment="Center" ToolTip="Create deployment media."/> <CheckBox x:Name="chkCreateDeploymentMedia" Content="Create Deployment Media" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, this will create WinPE deployment media for use when deploying to a physical device."/>
</WrapPanel> </WrapPanel>
<!-- Row 8: Build USB Drive Header --> <!-- Row 8: Build USB Drive Header -->
<!-- <TextBlock Grid.Row="8" Text="Build USB Drive" FontWeight="Bold" FontSize="16" Margin="0,10,0,5"/> --> <!-- <TextBlock Grid.Row="8" Text="Build USB Drive" FontWeight="Bold" FontSize="16" Margin="0,10,0,5"/> -->
@@ -208,16 +208,16 @@
<!-- Left Column: USB Drive Options --> <!-- Left Column: USB Drive Options -->
<StackPanel Grid.Column="0" Margin="5"> <StackPanel Grid.Column="0" Margin="5">
<TextBlock Text="Build USB Drive" FontWeight="Bold" FontSize="16" Margin="0,10,0,5"/> <TextBlock Text="Build USB Drive" FontWeight="Bold" FontSize="16" Margin="0,10,0,5"/>
<CheckBox x:Name="chkBuildUSBDrive" Content="Build USB Drive" Margin="5" VerticalAlignment="Center" ToolTip="Enable to create a bootable USB drive for deployment."/> <CheckBox x:Name="chkBuildUSBDrive" Content="Build USB Drive" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will partition and format a USB drive and copy the captured FFU to the drive."/>
<CheckBox x:Name="chkPromptExternalHardDiskMedia" Content="Prompt External Hard Disk Media" Margin="5" VerticalAlignment="Center" ToolTip="Prompt before using external hard disk media."/> <CheckBox x:Name="chkPromptExternalHardDiskMedia" Content="Prompt External Hard Disk Media" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will prompt the user to confirm the use of media identified as External Hard Disk media via WMI class Win32_DiskDrive. Default is $true."/>
<CheckBox x:Name="chkAllowExternalHardDiskMedia" Content="Allow External Hard Disk Media" Margin="5" VerticalAlignment="Center" ToolTip="Allow use of external hard disk media."/> <CheckBox x:Name="chkAllowExternalHardDiskMedia" Content="Allow External Hard Disk Media" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will allow the use of media identified as External Hard Disk media via WMI class Win32_DiskDrive. Default is not defined."/>
</StackPanel> </StackPanel>
<!-- Right Column: USB Drive Modification --> <!-- Right Column: USB Drive Modification -->
<StackPanel Grid.Column="1" Margin="5"> <StackPanel Grid.Column="1" Margin="5">
<TextBlock Text="USB Drive Modification" FontWeight="Bold" FontSize="16" Margin="0,10,0,5"/> <TextBlock Text="USB Drive Modification" FontWeight="Bold" FontSize="16" Margin="0,10,0,5"/>
<CheckBox x:Name="chkCopyAutopilot" Content="Copy Autopilot" Margin="5" VerticalAlignment="Center" ToolTip="Copy the Autopilot folder to the deployment partition."/> <CheckBox x:Name="chkCopyAutopilot" Content="Copy Autopilot" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will copy the $FFUDevelopmentPath\Autopilot folder to the Deployment partition of the USB drive. Default is $false."/>
<CheckBox x:Name="chkCopyUnattend" Content="Copy Unattend" Margin="5" VerticalAlignment="Center" ToolTip="Copy the Unattend folder to the deployment partition."/> <CheckBox x:Name="chkCopyUnattend" Content="Copy Unattend" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will copy the $FFUDevelopmentPath\Unattend folder to the Deployment partition of the USB drive. Default is $false."/>
<CheckBox x:Name="chkCopyPPKG" Content="Copy PPKG" Margin="5" VerticalAlignment="Center" ToolTip="Copy the PPKG folder to the deployment partition."/> <CheckBox x:Name="chkCopyPPKG" Content="Copy PPKG" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will copy the provisioning package from the $FFUDevelopmentPath\PPKG folder to the Deployment partition of the USB drive. Default is $false."/>
</StackPanel> </StackPanel>
</Grid> </Grid>
</Grid> </Grid>
@@ -236,6 +236,7 @@
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/> <ColumnDefinition Width="200"/>
@@ -243,13 +244,14 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- Row 0: VM Switch Name --> <!-- Row 0: VM Switch Name -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5"> <StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="VM Switch Name" ToolTip="Select the Hyper-V virtual switch name for your VM."/> <TextBlock Text="VM Switch Name" ToolTip="Name of the Hyper-V virtual switch. If $InstallApps is set to $true, this must be set. This is required to capture the FFU from the VM. The default is '*external*', but you will likely need to change this."/>
</StackPanel> </StackPanel>
<ComboBox x:Name="cmbVMSwitchName" <ComboBox x:Name="cmbVMSwitchName"
Grid.Row="0" Grid.Column="1" Grid.Row="0" Grid.Column="1"
Margin="5" Margin="5"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Stretch"/> HorizontalAlignment="Stretch"
ToolTip="Name of the Hyper-V virtual switch. If $InstallApps is set to $true, this must be set. This is required to capture the FFU from the VM. The default is '*external*', but you will likely need to change this."/>
<!-- Row 1: Custom VM Switch Name --> <!-- Row 1: Custom VM Switch Name -->
<TextBox x:Name="txtCustomVMSwitchName" <TextBox x:Name="txtCustomVMSwitchName"
Grid.Row="1" Grid.Column="1" Grid.Row="1" Grid.Column="1"
@@ -257,10 +259,10 @@
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Visibility="Collapsed" Visibility="Collapsed"
ToolTip="Enter your custom VM Switch Name if 'Other' is selected."/> ToolTip="Enter your custom VM Switch Name if 'Other' is selected."/>
<!-- Row 2: VM Host IP Address --> <!-- Row 2: VM Host IP Address -->
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5"> <StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="VM Host IP Address" ToolTip="Displays the host IP address associated with the selected VM switch."/> <TextBlock Text="VM Host IP Address" ToolTip="IP address of the Hyper-V host for FFU capture. If $InstallApps is set to $true, this parameter must be configured. You must manually configure this. The script will not auto-detect your IP (depending on your network adapters, it may not find the correct IP)."/>
</StackPanel> </StackPanel>
<TextBox x:Name="txtVMHostIPAddress" <TextBox x:Name="txtVMHostIPAddress"
Grid.Row="2" Grid.Column="1" Grid.Row="2" Grid.Column="1"
@@ -269,53 +271,68 @@
HorizontalAlignment="Stretch"/> HorizontalAlignment="Stretch"/>
<!-- Row 3: Disk Size (GB) --> <!-- Row 3: Disk Size (GB) -->
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5"> <StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Disk Size (GB)" ToolTip="Enter the size of the virtual hard disk in GB (e.g. 30)."/> <TextBlock Text="Disk Size (GB)" ToolTip="Size of the virtual hard disk for the virtual machine. Default is a 30GB dynamic disk."/>
</StackPanel> </StackPanel>
<TextBox x:Name="txtDiskSize" <TextBox x:Name="txtDiskSize"
Grid.Row="3" Grid.Column="1" Grid.Row="3" Grid.Column="1"
Margin="5" Margin="5"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Text="30"/> Text="30"
ToolTip="Size of the virtual hard disk for the virtual machine. Default is a 30GB dynamic disk."/>
<!-- Row 4: Memory (GB) --> <!-- Row 4: Memory (GB) -->
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5"> <StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Memory (GB)" ToolTip="Enter the amount of RAM for the VM in GB (e.g. 4)."/> <TextBlock Text="Memory (GB)" ToolTip="Amount of memory to allocate for the virtual machine. Recommended to use 8GB if possible, especially for Windows 11. Default is 4GB."/>
</StackPanel> </StackPanel>
<TextBox x:Name="txtMemory" <TextBox x:Name="txtMemory"
Grid.Row="4" Grid.Column="1" Grid.Row="4" Grid.Column="1"
Margin="5" Margin="5"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Text="4"/> Text="4"
ToolTip="Amount of memory to allocate for the virtual machine. Recommended to use 8GB if possible, especially for Windows 11. Default is 4GB."/>
<!-- Row 5: Processors --> <!-- Row 5: Processors -->
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5"> <StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Processors" ToolTip="Enter the number of virtual processors (e.g. 4)."/> <TextBlock Text="Processors" ToolTip="Number of virtual processors for the virtual machine. Recommended to use at least 4."/>
</StackPanel> </StackPanel>
<TextBox x:Name="txtProcessors" <TextBox x:Name="txtProcessors"
Grid.Row="5" Grid.Column="1" Grid.Row="5" Grid.Column="1"
Margin="5" Margin="5"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Text="4"/> Text="4"
ToolTip="Number of virtual processors for the virtual machine. Recommended to use at least 4."/>
<!-- Row 6: VM Location --> <!-- Row 6: VM Location -->
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5"> <StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="VM Location" ToolTip="Enter the folder path where the VM files will be stored."/> <TextBlock Text="VM Location" ToolTip="Default is $FFUDevelopmentPath\VM. This is the location of the VHDX that gets created where Windows will be installed to."/>
</StackPanel> </StackPanel>
<TextBox x:Name="txtVMLocation" <TextBox x:Name="txtVMLocation"
Grid.Row="6" Grid.Column="1" Grid.Row="6" Grid.Column="1"
Margin="5" Margin="5"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Text="{x:Static sys:Environment.CurrentDirectory}"/> Text="{x:Static sys:Environment.CurrentDirectory}"
<!-- Row 7: Logical Sector Size --> ToolTip="Default is $FFUDevelopmentPath\VM. This is the location of the VHDX that gets created where Windows will be installed to."/>
<!-- Row 7: VM Name Prefix -->
<StackPanel Grid.Row="7" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5"> <StackPanel Grid.Row="7" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Logical Sector Size" ToolTip="Select the logical sector size (512 or 4096 bytes)."/> <TextBlock Text="VM Name Prefix" ToolTip="Prefix for the VM Name. The default is _FFU."/>
</StackPanel>
<TextBox x:Name="txtVMNamePrefix"
Grid.Row="7" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
ToolTip="Prefix for the VM Name. The default is _FFU."/>
<!-- Row 8: Logical Sector Size -->
<StackPanel Grid.Row="8" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Logical Sector Size" ToolTip="Unit32 value of 512 or 4096. Useful for 4Kn drives or devices shipping with UFS drives. Default is 512."/>
</StackPanel> </StackPanel>
<ComboBox x:Name="cmbLogicalSectorSize" <ComboBox x:Name="cmbLogicalSectorSize"
Grid.Row="7" Grid.Column="1" Grid.Row="8" Grid.Column="1"
Margin="5" Margin="5"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Left"> HorizontalAlignment="Left"
ToolTip="Unit32 value of 512 or 4096. Useful for 4Kn drives or devices shipping with UFS drives. Default is 512.">
<ComboBoxItem Content="512" IsSelected="True"/> <ComboBoxItem Content="512" IsSelected="True"/>
<ComboBoxItem Content="4096"/> <ComboBoxItem Content="4096"/>
</ComboBox> </ComboBox>
@@ -342,7 +359,7 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- (0) ISO Path --> <!-- (0) ISO Path -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows ISO Path" VerticalAlignment="Center" ToolTip="Specify the path to the Windows ISO file (optional)."/> <TextBlock Text="Windows ISO Path" VerticalAlignment="Center" ToolTip="Path to the Windows 10/11 ISO file."/>
</StackPanel> </StackPanel>
<Grid Grid.Row="0" Grid.Column="1" Margin="5"> <Grid Grid.Row="0" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -362,16 +379,17 @@
</Grid> </Grid>
<!-- (1) Windows Release --> <!-- (1) Windows Release -->
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows Release" VerticalAlignment="Center" ToolTip="Select the Windows release version to be installed."/> <TextBlock Text="Windows Release" VerticalAlignment="Center" ToolTip="Integer value of 10 or 11. This is used to identify which release of Windows to download. Default is 11."/>
</StackPanel> </StackPanel>
<ComboBox x:Name="cmbWindowsRelease" <ComboBox x:Name="cmbWindowsRelease"
Grid.Row="1" Grid.Column="1" Grid.Row="1" Grid.Column="1"
Margin="5" Margin="5"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Stretch"/> HorizontalAlignment="Stretch"
ToolTip="Integer value of 10 or 11. This is used to identify which release of Windows to download. Default is 11."/>
<!-- (2) Windows Version --> <!-- (2) Windows Version -->
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows Version" VerticalAlignment="Center" ToolTip="Select the build version corresponding to the Windows release."/> <TextBlock Text="Windows Version" VerticalAlignment="Center" ToolTip="String value of the Windows version to download. This is used to identify which version of Windows to download. Default is '24h2'."/>
</StackPanel> </StackPanel>
<ComboBox x:Name="cmbWindowsVersion" <ComboBox x:Name="cmbWindowsVersion"
Grid.Row="2" Grid.Column="1" Grid.Row="2" Grid.Column="1"
@@ -379,49 +397,54 @@
Width="120" Width="120"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Left" HorizontalAlignment="Left"
IsEnabled="False"/> IsEnabled="False"
ToolTip="String value of the Windows version to download. This is used to identify which version of Windows to download. Default is '24h2'."/>
<!-- (3) Windows Arch --> <!-- (3) Windows Arch -->
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows Architecture" VerticalAlignment="Center" ToolTip="Select the architecture (x86, x64, arm64) for Windows installation."/> <TextBlock Text="Windows Architecture" VerticalAlignment="Center" ToolTip="String value of 'x86' or 'x64'. This is used to identify which architecture of Windows to download. Default is 'x64'."/>
</StackPanel> </StackPanel>
<ComboBox x:Name="cmbWindowsArch" <ComboBox x:Name="cmbWindowsArch"
Grid.Row="3" Grid.Column="1" Grid.Row="3" Grid.Column="1"
Margin="5" Margin="5"
Width="120" Width="120"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Left"/> HorizontalAlignment="Left"
ToolTip="String value of 'x86' or 'x64'. This is used to identify which architecture of Windows to download. Default is 'x64'."/>
<!-- (4) Windows Lang --> <!-- (4) Windows Lang -->
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows Language" VerticalAlignment="Center" ToolTip="Select the default language for Windows."/> <TextBlock Text="Windows Language" VerticalAlignment="Center" ToolTip="String value in language-region format (e.g., 'en-us'). This is used to identify which language of media to download. Default is 'en-us'."/>
</StackPanel> </StackPanel>
<ComboBox x:Name="cmbWindowsLang" <ComboBox x:Name="cmbWindowsLang"
Grid.Row="4" Grid.Column="1" Grid.Row="4" Grid.Column="1"
Margin="5" Margin="5"
Width="120" Width="120"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Left"/> HorizontalAlignment="Left"
ToolTip="String value in language-region format (e.g., 'en-us'). This is used to identify which language of media to download. Default is 'en-us'."/>
<!-- (5) Windows SKU --> <!-- (5) Windows SKU -->
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Windows SKU" VerticalAlignment="Center" ToolTip="Select the Windows edition (SKU) to install."/> <TextBlock Text="Windows SKU" VerticalAlignment="Center" ToolTip="Edition of Windows 10/11 to be installed. Accepted values are: 'Home', 'Home N', 'Home Single Language', 'Education', 'Education N', 'Pro', 'Pro N', 'Pro Education', 'Pro Education N', 'Pro for Workstations', 'Pro N for Workstations', 'Enterprise', 'Enterprise N'."/>
</StackPanel> </StackPanel>
<ComboBox x:Name="cmbWindowsSKU" <ComboBox x:Name="cmbWindowsSKU"
Grid.Row="5" Grid.Column="1" Grid.Row="5" Grid.Column="1"
Margin="5" Margin="5"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Stretch"/> HorizontalAlignment="Stretch"
ToolTip="Edition of Windows 10/11 to be installed. Accepted values are: 'Home', 'Home N', 'Home Single Language', 'Education', 'Education N', 'Pro', 'Pro N', 'Pro Education', 'Pro Education N', 'Pro for Workstations', 'Pro N for Workstations', 'Enterprise', 'Enterprise N'."/>
<!-- (6) Media Type --> <!-- (6) Media Type -->
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Media Type" VerticalAlignment="Center" ToolTip="Choose the media type (Consumer or Business) for Windows deployment."/> <TextBlock Text="Media Type" VerticalAlignment="Center" ToolTip="String value of either 'business' or 'consumer'. This is used to identify which media type to download. Default is 'consumer'."/>
</StackPanel> </StackPanel>
<ComboBox x:Name="cmbMediaType" <ComboBox x:Name="cmbMediaType"
Grid.Row="6" Grid.Column="1" Grid.Row="6" Grid.Column="1"
Margin="5" Margin="5"
Width="120" Width="120"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Left"/> HorizontalAlignment="Left"
ToolTip="String value of either 'business' or 'consumer'. This is used to identify which media type to download. Default is 'consumer'."/>
<!-- (7) Product Key --> <!-- (7) Product Key -->
<StackPanel Grid.Row="7" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel Grid.Row="7" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<TextBlock Text="Product Key" VerticalAlignment="Center" ToolTip="Enter the Windows product key if required."/> <TextBlock Text="Product Key" VerticalAlignment="Center" ToolTip="Product key for the Windows edition specified in WindowsSKU. This will overwrite whatever SKU is entered for WindowsSKU. Recommended to use if you want to use a MAK or KMS key to activate Enterprise or Education. If using VL media instead of consumer media, you'll want to enter a MAK or KMS key here."/>
</StackPanel> </StackPanel>
<TextBox x:Name="txtProductKey" <TextBox x:Name="txtProductKey"
Grid.Row="7" Grid.Column="1" Grid.Row="7" Grid.Column="1"
@@ -448,7 +471,7 @@
IsReadOnly="True" IsReadOnly="True"
Width="350" Width="350"
Margin="0,0,0,10" Margin="0,0,0,10"
ToolTip="Semicolon-delimited list of optional features"/> ToolTip="Provide a semicolon-separated list of Windows optional features you want to include in the FFU (e.g., netfx3;TFTP)."/>
</StackPanel> </StackPanel>
</ScrollViewer> </ScrollViewer>
</Expander> </Expander>
@@ -458,13 +481,13 @@
<!-- TAB: Updates --> <!-- TAB: Updates -->
<TabItem Header="Updates" Padding="20"> <TabItem Header="Updates" Padding="20">
<StackPanel Margin="5"> <StackPanel Margin="5">
<CheckBox x:Name="chkUpdateLatestCU" Content="Update Latest Cumulative Update" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest cumulative update for Windows."/> <CheckBox x:Name="chkUpdateLatestCU" Content="Update Latest Cumulative Update" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will download and install the latest cumulative update for Windows 10/11. Default is $false."/>
<CheckBox x:Name="chkUpdateLatestNet" Content="Update .NET" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest .NET Framework update."/> <CheckBox x:Name="chkUpdateLatestNet" Content="Update .NET" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will download and install the latest .NET Framework for Windows 10/11. Default is $false."/>
<CheckBox x:Name="chkUpdateLatestDefender" Content="Update Defender" Margin="5" VerticalAlignment="Center" ToolTip="Download the latest Windows Defender definitions."/> <CheckBox x:Name="chkUpdateLatestDefender" Content="Update Defender" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will download and install the latest Windows Defender definitions and Defender platform update. Default is $false."/>
<CheckBox x:Name="chkUpdateEdge" Content="Update Edge" Margin="5" VerticalAlignment="Center" ToolTip="Update Microsoft Edge to the latest version."/> <CheckBox x:Name="chkUpdateEdge" Content="Update Edge" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will download and install the latest Microsoft Edge for Windows 10/11. Default is $false."/>
<CheckBox x:Name="chkUpdateOneDrive" Content="Update OneDrive (Per-Machine)" Margin="5" VerticalAlignment="Center" ToolTip="Update OneDrive to the latest version available."/> <CheckBox x:Name="chkUpdateOneDrive" Content="Update OneDrive (Per-Machine)" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will download and install the latest OneDrive for Windows 10/11 and install it as a per-machine installation instead of per-user. Default is $false."/>
<CheckBox x:Name="chkUpdateLatestMSRT" Content="Update Microsoft Software Removal Tool (MSRT)" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest Microsoft Safety Scan."/> <CheckBox x:Name="chkUpdateLatestMSRT" Content="Update Microsoft Software Removal Tool (MSRT)" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will download and install the latest Windows Malicious Software Removal Tool. Default is $false."/>
<CheckBox x:Name="chkUpdatePreviewCU" Content="Update Preview Cumulative Update" Margin="5" VerticalAlignment="Center" ToolTip="Download and install the latest preview cumulative update."/> <CheckBox x:Name="chkUpdatePreviewCU" Content="Update Preview Cumulative Update" Margin="5" VerticalAlignment="Center" ToolTip="When set to $true, will download and install the latest Preview cumulative update for Windows 10/11. Default is $false."/>
</StackPanel> </StackPanel>
</TabItem> </TabItem>
@@ -479,7 +502,7 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<CheckBox x:Name="chkInstallApps" Content="Install Apps" Margin="0,0,5,0" ToolTip="Check to include additional applications in the FFU."/> <CheckBox x:Name="chkInstallApps" Content="Install Apps" Margin="0,0,5,0" ToolTip="When set to $true, the script will create an Apps.iso file from the $FFUDevelopmentPath\Apps folder. It will also create a VM, mount the Apps.iso, install the apps, sysprep, and capture the VM. When set to $false, the FFU is created from a VHDX file, and no VM is created."/>
</StackPanel> </StackPanel>
</Grid> </Grid>
</TabItem> </TabItem>
@@ -498,17 +521,17 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<CheckBox x:Name="chkInstallOffice" Content="Install Office" Margin="0,0,5,0" ToolTip="Enable to install Microsoft Office applications."/> <CheckBox x:Name="chkInstallOffice" Content="Install Office" Margin="0,0,5,0" ToolTip="Install Microsoft Office if set to $true. The script will download the latest ODT and Office files in the $FFUDevelopmentPath\Apps\Office folder and install Office in the FFU via VM."/>
</StackPanel> </StackPanel>
<StackPanel x:Name="OfficePathStackPanel" Grid.Row="1" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5"> <StackPanel x:Name="OfficePathStackPanel" Grid.Row="1" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Office Path" ToolTip="Specify the installation folder for Office."/> <TextBlock Text="Office Path" ToolTip="Path to the Office installation files."/>
</StackPanel> </StackPanel>
<Grid x:Name="OfficePathGrid" Grid.Row="1" Grid.Column="1" Margin="5"> <Grid x:Name="OfficePathGrid" Grid.Row="1" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBox x:Name="txtOfficePath" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch"/> <TextBox x:Name="txtOfficePath" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch" ToolTip="Path to the Office installation files."/>
<Button x:Name="btnBrowseOfficePath" Grid.Column="1" Content="Browse..." Width="80" VerticalAlignment="Center"/> <Button x:Name="btnBrowseOfficePath" Grid.Column="1" Content="Browse..." Width="80" VerticalAlignment="Center"/>
</Grid> </Grid>
<StackPanel x:Name="CopyOfficeConfigXMLStackPanel" Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5"> <StackPanel x:Name="CopyOfficeConfigXMLStackPanel" Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
@@ -522,7 +545,7 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBox x:Name="txtOfficeConfigXMLFilePath" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch"/> <TextBox x:Name="txtOfficeConfigXMLFilePath" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch" ToolTip="Specify the path to the Office configuration XML file."/>
<Button x:Name="btnBrowseOfficeConfigXMLFile" Grid.Column="1" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center"/> <Button x:Name="btnBrowseOfficeConfigXMLFile" Grid.Column="1" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center"/>
</Grid> </Grid>
</Grid> </Grid>
@@ -545,13 +568,13 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="5"> <StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkInstallDrivers" Content="Install Drivers to FFU" Margin="0,0,5,0" ToolTip="Inject drivers directly into the FFU."/> <CheckBox x:Name="chkInstallDrivers" Content="Install Drivers to FFU" Margin="0,0,5,0" ToolTip="Install device drivers from the specified $FFUDevelopmentPath\Drivers folder if set to $true. Download the drivers and put them in the Drivers folder. The script will recurse the drivers folder and add the drivers to the FFU."/>
</StackPanel> </StackPanel>
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="5"> <StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkCopyDrivers" Content="Copy Drivers to USB drive" Margin="0,0,5,0" ToolTip="Copy the drivers folder to the USB deploy partition."/> <CheckBox x:Name="chkCopyDrivers" Content="Copy Drivers to USB drive" Margin="0,0,5,0" ToolTip="When set to $true, will copy the drivers from the $FFUDevelopmentPath\Drivers folder to the Drivers folder on the deploy partition of the USB drive. Default is $false."/>
</StackPanel> </StackPanel>
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="5"> <StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkDownloadDrivers" Content="Download Drivers" Margin="0,0,5,0" ToolTip="Enable to automatically download the latest drivers."/> <CheckBox x:Name="chkDownloadDrivers" Content="Download Drivers" Margin="0,0,5,0" ToolTip="Download the drivers and put them in the Drivers folder."/>
</StackPanel> </StackPanel>
<StackPanel x:Name="spMakeModelSection" Grid.Row="3" Grid.ColumnSpan="2" Visibility="Collapsed" Margin="0"> <StackPanel x:Name="spMakeModelSection" Grid.Row="3" Grid.ColumnSpan="2" Visibility="Collapsed" Margin="0">
<Grid Margin="0"> <Grid Margin="0">
@@ -564,38 +587,38 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="5"> <StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock x:Name="txtMakeLabel" Text="Make: " VerticalAlignment="Center" ToolTip="Select the hardware manufacturer to filter available drivers."/> <TextBlock x:Name="txtMakeLabel" Text="Make: " VerticalAlignment="Center" ToolTip="Make of the device to download drivers. Accepted values are: 'Microsoft', 'Dell', 'HP', 'Lenovo'."/>
</StackPanel> </StackPanel>
<ComboBox x:Name="cmbMake" Grid.Row="0" Grid.Column="1" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Stretch"/> <ComboBox x:Name="cmbMake" Grid.Row="0" Grid.Column="1" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="5"> <StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock x:Name="txtModelLabel" Text="Model: " VerticalAlignment="Center" ToolTip="Enter the device model to pick matching drivers."/> <TextBlock x:Name="txtModelLabel" Text="Model: " VerticalAlignment="Center" ToolTip="Model of the device to download drivers. This is required if Make is set."/>
</StackPanel> </StackPanel>
<TextBox x:Name="cmbModel" Grid.Row="1" Grid.Column="1" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Stretch"/> <TextBox x:Name="cmbModel" Grid.Row="1" Grid.Column="1" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
</Grid> </Grid>
</StackPanel> </StackPanel>
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="5"> <StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock Text="Drivers Folder:" VerticalAlignment="Center" ToolTip="Specify the folder containing additional drivers."/> <TextBlock Text="Drivers Folder:" VerticalAlignment="Center" ToolTip="Path to the drivers folder. Default is $FFUDevelopmentPath\Drivers."/>
</StackPanel> </StackPanel>
<Grid Grid.Row="4" Grid.Column="1" Margin="5"> <Grid Grid.Row="4" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBox x:Name="txtDriversFolder" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch"/> <TextBox x:Name="txtDriversFolder" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch" ToolTip="Path to the drivers folder. Default is $FFUDevelopmentPath\Drivers."/>
<Button x:Name="btnBrowseDriversFolder" Grid.Column="1" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center"/> <Button x:Name="btnBrowseDriversFolder" Grid.Column="1" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center"/>
</Grid> </Grid>
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="5"> <StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkCopyPEDrivers" Content="Copy PE Drivers" Margin="0,0,5,0" ToolTip="Copy local PE Drivers folder to the build."/> <CheckBox x:Name="chkCopyPEDrivers" Content="Copy PE Drivers" Margin="0,0,5,0" ToolTip="When set to $true, will copy the drivers from the $FFUDevelopmentPath\PEDrivers folder to the WinPE deployment media. Default is $false."/>
</StackPanel> </StackPanel>
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="5"> <StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock Text="PE Drivers Folder:" VerticalAlignment="Center" ToolTip="Specify the folder with pre-installation drivers."/> <TextBlock Text="PE Drivers Folder:" VerticalAlignment="Center" ToolTip="Path to the PE drivers folder. Default is $FFUDevelopmentPath\PEDrivers."/>
</StackPanel> </StackPanel>
<Grid Grid.Row="6" Grid.Column="1" Margin="5"> <Grid Grid.Row="6" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBox x:Name="txtPEDriversFolder" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch"/> <TextBox x:Name="txtPEDriversFolder" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch" ToolTip="Path to the PE drivers folder. Default is $FFUDevelopmentPath\PEDrivers."/>
<Button x:Name="btnBrowsePEDrivers" Grid.Column="1" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center"/> <Button x:Name="btnBrowsePEDrivers" Grid.Column="1" Content="Browse..." Width="80" Margin="5,0,0,0" VerticalAlignment="Center"/>
</Grid> </Grid>
</Grid> </Grid>