rbalsleyMSFT d5a4f96482 Enhance FFU Development Scripts and Configuration
BuildFFUVM.ps1
- Added parameter definitions that were missing:
  - AppListPath - Path to a JSON file containing a list of applications to install using WinGet. Default is $FFUDevelopmentPath\Apps\AppList.json.
  - PEDriversFolder - Path to the folder containing drivers to be injected into the WinPE deployment media. Default is $FFUDevelopmentPath\PEDrivers.
- Added two new parameters:
  - UpdateLatestMicrocode - This is used for Windows 10/Server. When set to $true, will download and install the latest microcode updates for applicable Windows releases (e.g., Windows Server 2016/2019, Windows 10 LTSC 2016/2019) into the FFU. Default is $false.
  - UpdateADK - Added for airgapped scenarios where you've manually updated the ADK and don't need it to continually check. When set to $true, the script will check for and install the latest Windows ADK and WinPE add-on if they are not already installed or up-to-date. Default is $true.
- Reorganized the WindowsSKU validateset to make it easier to read and added in 2016 LTSB releases
- Changed version to 2505.1
- Reorganized the releasetoMapping SKUs to make it easier to read
- Omitted Defender/Edge from reporting KB ID since neither includes it
- Updated Save-KB with some enhancements from the UI branch which will handle KBs that don't have an architecture defined in their file name that will leverage a new function Get-PEArchitecture that can interrogate the file name and determine the correct architecture
- Updated Get-ShortenedWindowsSKU with LTSB/LTSC SKUs
- Updated New-FFUFileName to use $winverinfo.Name for $WindowsRelease for client OSes to which will set $WindowsRelease to using Win10 or Win11. This fixes a bug where you might see 10 or 11 instead of Win10 or Win11 for FFU builds that use only the VHDX (e.g. `-InstallApps $false`. This keeps the naming consistent with FFUs built via VM.
- Updated Get-WindowsVersionInfo to fix an issue with naming LTSC 2019
- Added Get-PEArchitecture function
- Commented out the Windows Security Platform Update code since the URL is dead for the content. This is fixed in the UI branch and will be reintroduced in Dev and Main at a later date when the UI work is complete.
- Created a new variable `$isLTSC`
- Modified and reorganized the search strings for the various .net framework components. LTSC introduced some complexity with handling the various .net releases.
- VHDXCaching will now recurse the KBPath folder when finding downloaded KBs to include in its config file

Sample_default.json
- Added new/missing parameters
  - ApplistPath
  - UpdateADK
  - UpdateLatestMicrocode

CaptureFFU.ps1
- `$WindowsVersion` 2016 and 2019 for LTSC releases
- Changed some SKU spacing to make things more consistent and included Enterprise N LTSC

ApplyFFU.ps1
- Updated version to 2505.1
2025-05-21 16:44:21 -07:00
2024-12-20 13:01:50 -08:00
2023-02-15 14:37:14 -08:00
2024-12-20 13:03:14 -08:00

Using Full Flash Update (FFU) files to speed up Windows deployment

What if you could have a Windows image (Windows 10/11 or Server) that has:

  • The latest Windows cumulative update
  • The latest .NET cumulative update
  • The latest Windows Defender Platform and Definition Updates
  • The latest version of Microsoft Edge
  • The latest version of OneDrive (Per-Machine)
  • The latest version of Microsoft 365 Apps/Office
  • The latest drivers from any of the major OEMs (Dell, HP, Lenovo, Microsoft) (yes, the latest, not some out of date enterprise CAB file from years ago)
  • Winget support so you can integrate any app available from Winget directly in your image
  • ARM64 support for the latest Copilot+ PCs
  • The ability to bring your own drivers and apps if necessary
  • Custom WinRE support

And the best part: it takes less than two minutes to apply the image, even with all of these updates added to the media. After setting Windows up and going through Autopilot or a provisioning package, total elapsed time ~10 minutes (depending on what Intune or your device management tool is deploying).

The Full-Flash update (FFU) process can automatically download the latest release of Windows 11, the updates mentioned above, and creates a USB drive that can be used to quickly reimage a machine.

Updates

2412.1 has been released! Check out the changes in the Change Log

Getting Started

  • Download the latest release
  • Extract the FFUDevelopment folder from the ZIP file (recommend to C:\FFUDevelopment)
  • Follow the doc: C:\FFUDevelopment\Docs\BuildDeployFFU.docx

YouTube Detailed Walkthrough

The first 15 minutes of the following video includes a quick start demo to get started. Below the video are a list of chapters. This video was taken with the 2407.2 build. Features released after that will not be demonstrated in the video.

Reimage Windows Fast with Full-Flash Update (FFU))

Chapters:

00:00 Begin

03:21 Quick Start Prereqs

07:19 Quick Start Demo

14:12 Script Parameters

17:22 Obtaining Windows Media

25:55 Adding Applications

26:59 Adding M365 Apps/Office

29:21 Adding Applications via Winget

34:59 Bring your own Applications

36:01 Customizing InstallAppsAndSysprep.cmd

38:34 Demo - Application Configuration

49:43 Drivers

55:39 Automatically downloading drivers

57:28 Microsoft Surface drivers

58:55 Dell drivers

01:01:45 Lenovo drivers

01:03:16 HP drivers

01:05:25 Bring your own drivers

01:06:24 Demo - Drivers

01:11:55 Multi-model driver support

01:13:21 Device naming

01:18:30 Device enrollment

01:21:43 Autopilot

01:24:57 Provisioning packages

01:26:54 Custom WinRE

01:29:59 Demo - Putting it all together (Deep dive)

01:32:06 Downloading Lenovo 500w drivers

01:33:28 Downloading apps via Winget

01:36:54 Downloading Office, Defender, Edge, OneDrive

01:38:15 Building the Apps.iso

01:39:08 Applying Windows to the VHDX

01:40:16 Downloading and applying cumulative updates

01:41:44 Building the VM

01:48:13 Capturing the FFU

01:53:38 Creating USB drive

01:58:41 Deploying FFU

02:11:48 Troubleshooting

02:14:30 EDU Endpoint Office Hours

S
Description
No description provided
Readme MIT 27 MiB
Languages
PowerShell 100%