Restore default partition letters and sizing, re-enable Recovery, and clear additional data partitions. Reuse the reset during main Restore Defaults while preserving disk and sector sizes for the focused action.
Always use configured letters in build VMs. On deployed devices, preserve opted-in letters and assign unchecked partitions from D: upward, relocating recognized FFU USB volumes while protecting unrelated volumes.
Update UI guidance, logs, and documentation.
Keep the Windows Fill Remaining option available when fixed-size data
partitions are configured, and enforce a single fill-remaining partition
across UI and CLI validation.
Reserve fixed data partition capacity by safely shrinking the maximum-size
Windows partition before creating Recovery and data partitions. Update the
Hyper-V settings and parameter documentation for the supported layouts.
Detect pending reboot markers before invoking Sysprep and log the exact
reason, including CBS, Windows Update, WinSxS pending.xml, and every
PendingFileRenameOperations entry.
When a reboot is required, register a one-time Audit mode RunOnce retry
that reloads the Apps media, waits for Explorer, closes Audit-mode
Sysprep UI races, and relaunches Run-Sysprep.ps1.
When no explicit OptimizeFFUPartitionNumber or FillRemaining data
partition is configured, avoid passing /PartitionNumber for the resolved
Windows partition. This keeps DISM on its default OS partition path and
avoids FFU provider failures after resizing partition 3 in layouts with
Recovery after Windows.
Update BuildFFUVM.ps1 so Recovery partition creation fails clearly when
the disk cannot provide enough usable free extent. Align the calculated
Recovery size, reserve extra shrink slack for partition metadata, verify
supported shrink sizes, and require Storage cmdlets to throw terminating
errors so failures are logged instead of continuing with a blank drive
letter.
Assign Invoke-ParallelProcessing results in the Winget and UI app paths so raw result hashtables are not emitted to the console during app download or copy operations.
Use the selected FFU count in New-DeploymentUSB so one-item arrays log as single-file copies while multi-FFU copies keep the existing multiple-file message.
For FillRemaining data partitions, select the target from the mounted VHDX data-partition order and reassign the configured drive letter when it is free.
Throw when the configured drive letter is already occupied instead of falling back to data volume label/name matching.
Fall back to the Fill Remaining data partition's volume label or name when the mounted VHDX no longer uses the configured build-time drive letter. Log the resolved drive letter and preserve manual OptimizeFFUPartitionNumber overrides.
Consolidate disk size, required partition drive letters, Recovery, and data partition settings into the Hyper-V Disk Layout UI. Add capacity validation, Fill Remaining handling, Recovery remove/restore, data partition reorder/remove controls, and persist CreateRecoveryPartition through config and VHDX cache checks.
Update FFU optimization so automatic partition selection targets the Fill Remaining partition, falling back to Windows when none is selected. Refresh sample config and docs for the new Disk Layout parameters.
Run cleanmgr.exe without blocking on Start-Process -Wait, pump WM_NULL to its threads while enforcing a timeout, and always remove StateFlags0000 registry values in a finally block.
Support configurable data partitions after Recovery, including UI/config persistence, VHDX cache layout signatures, fixed-size-before-fill-remaining creation, and safer Windows/Recovery partition detection during capture and apply.
Replace hard-coded D:\ Apps ISO assumptions with FFUAppsRoot discovery, token expansion, legacy D:\ BYO app path remapping, and a logged audit-mode orchestration bootstrap.
Update BYO apps, Hyper-V settings, and parameter documentation.
Add a shared WinGet component status helper that uses Get-WinGetVersion
through Microsoft.WinGet.Client, and route both the CLI and UI status checks
through it. This removes the UI-only winget.exe --version parsing path and
adds clearer logging for missing modules, missing cmdlets, parse failures,
and caught WinGet version errors.
Use DeviceGroup OperatingSystem osArch when selecting Dell client driver packages, falling back to SupportedOperatingSystems when DeviceGroup metadata is absent. This keeps existing server catalog behavior unchanged.
Add System, Windows, and Recovery partition drive-letter settings to the Hyper-V Settings UI, config save/load, BuildFFUVM parameters, and sample/docs. Defaults remain S, W, and R.
Validate selected letters early, log validation failures for the UI, include drive-letter metadata in VHDX cache matching, and normalize legacy malformed cache values. This only affects FFU build-time partitioning; ApplyFFU deployment letters remain unchanged.
Treat WinGetWin32Apps.json as generated app orchestration output so failed or cancelled builds do not restore stale install metadata. Reuse Apps.iso when app inputs have not changed, and refresh it only when current app content or orchestration inputs are newer.
Copies the source answer file to local temp storage before use, preserving the original media file and failing fast if the working copy cannot be prepared.
Cleans up the introductory section by removing specific patch notes and release announcements. This streamlines the content to maintain focus on general usage and instructions rather than transient update news.
Documents the new features, improvements, and fixes included in the 2604.1 release. Highlights include the transition to Fluent UI styling alongside PowerShell 7.6, direct VHDX capturing for improved build times, and new UI controls for device naming and unattend file paths. Also notes critical fixes for Surface and Lenovo driver downloads, as well as image servicing reliability following recent Windows updates.
Refreshes numerous screenshot image references across the documentation to reflect the latest UI changes. Updates text descriptions in several documents (Build, Prerequisites, Quickstart, Windows Settings) to align with recent features, such as the new Windows Media Source options, explicitly mentioning PowerShell 7.6+ requirements, and clarifying the Device Naming and Copy Unattend.xml behavior.
Co-authored-by: Copilot <copilot@github.com>
Introduces a new `SerialComputerNames` device naming mode that allows automated device naming during deployment based on the BIOS serial number. The mapping is provided via a CSV file with `SerialNumber` and `ComputerName` columns.
This feature requires `CopyUnattend` and writes a `SerialComputerNames.csv` file to the USB deployment media, replacing the need for manual prompts or prefix selection when device serial numbers are known in advance. The UI has been updated to support creating, loading, and saving the CSV mapping content.
Updates the FFU UI core to better track the loaded `DeviceNamingMode` configuration.
Introduces flags to detect explicit user changes versus default states.
Ensures that if the user does not explicitly set the device naming mode, it defaults gracefully and preserves legacy script behaviors.
Updates documentation to reflect the actual behavior of not writing the `DeviceNamingMode` key unless modified.
Replaces the direct invocation of DISM via cmd with the native Windows PowerShell cmdlet to streamline and simplify the package installation process during WinPE media creation.
Replaces the native PowerShell command for adding Windows packages with direct command-line invocations of the Deployment Image Servicing and Management (DISM) tool. This fixes an issue introduced by the March 31, 2026 OOB update that persists in the April 2026 2B update where Add-WindowsPackage fails due to issues with CBS. Using native dism fixes the issue.
Adds parameters for x64 and arm64 unattend XML file paths.
Updates the BuildFFUVM_UI to let the user pick specific XML files to copy or inject instead of requiring them to exist in the `unattend` folder.
Adds validation to ensure the selected unattend XML files are not empty.
Updates documentation to reflect the new functionality.
Replaces the strict validation for an existing ComputerName element with dynamic XML initialization. Automatically creates the specialize settings block, the Microsoft-Windows-Shell-Setup component, and the ComputerName element if they are missing from the provided Unattend XML file. This improves script robustness and simplifies the requirements for custom unattended setup templates by patching in the necessary device naming structure on the fly.
Introduces an explicit "Prompt" option for device naming to allow technicians to enter the device name during deployment. This replaces the implicit legacy behavior, providing clear UI controls and validation to ensure that Unattend.xml is copied, which is required for prompt-based naming. Relevant documentation is updated to reflect this new workflow capability.
Refactors the `ApplyFFU.ps1` script to use a new `Read-MenuSelection` function for standardized user prompts, improving input validation and allowing users to skip optional prompts (like prefix selection, AP JSON, and PPKG files). Updates sample unattend XML files to use `*` for the computer name, falling back to default Windows naming if not specified. Updates the documentation to reflect the new UI and script behaviors.