Commit Graph

37 Commits

Author SHA1 Message Date
rbalsleyMSFT d2909ab21d Adds support for driver installation from WIM files
Updates the driver installation logic to prioritize searching for and installing drivers from .wim files located in the `Drivers` directory. If a single WIM is found, it is used automatically. If multiple WIMs are found, the user is prompted for a selection.

The script extracts the WIM to a temporary location before injecting the drivers. The previous method of installing from a folder is retained as a fallback if no WIM files are present. Error handling and cleanup for the WIM installation process are also included.
2025-06-24 16:13:02 -07:00
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
JonasKloseBW 0606a1278c Update ApplyFFU.ps1
- Allows setting the computer name with a predefined list (SerialComputerNames.csv) of serial numbers and matching computer names
- Defaults to FFU-{Random} if no matching serial number is found in list so FFU deployment can continue without user input
2025-02-27 18:37:29 +01:00
rbalsleyMSFT 7c9f24f695 Fixed issues
- Fixed an issue where if AppsScriptVariables was configured in a config file, the hashtable wasn't being created by the script when setting the variable.
- Fixed a crash where shortening the Windows SKU was creating duplicate shortened names for certain SKUs.
2025-01-16 18:00:08 -08:00
rbalsleyMSFT db62e05275 Bug fixes
- Fixed an issue with WinPE Drivers not being added to Deployment media
- Fixed an issue where Windows SKUs that include spaces in their names (e.g. Pro Education) and `$InstallApps $false`, FFU creation would fail due to the name including a space. Added a new function `Get-ShortenedWindowsSKU` to truncate the SKU for FFU name creation purposes. This required various changes throughout the script that relied on the Windows SKU for naming.
- Updated version 2412.3
2025-01-10 13:50:00 -08:00
rbalsleyMSFT 0ed0cf4aa2 Changed ApplyFFU version to 2412.1 2024-12-19 17:09:06 -08:00
rbalsleyMSFT 37f6dce344 Changes
- Updated parameter definition block to be alphabetized (not to be confused by the param block, which is not alphabetized)
- Added $PEDriversFolder script variable to the param block (for some reason it was missing)
- Added ConfigFile and ExportConfigFile parameters to support json config files
- Changed Version to 2412.1
- Modified vhdxCacheItem class to include $LogicalSectorSizeBytes
- Added new function Get-Parameters to help with new config and export config file functionality
- Fixed Get-MicrosoftDrivers function to not require the HTMLFILE COM object, which isn't available in Windows 11. It seems to be installed with Office, which is what was allowing downloads to work and masked the issue.
- Added long path support to prevent issues with oscdimg creating the Apps.iso.
- Fixed an issue where the $PEDriversFolder variable wasn't being used (instead $FFUDevelopment\PEDrivers was used)
- Created a new function New-FFUFileName - this works in conjunction with the new $CustomFFUNameTemplate. The function was needed to support both scenarios where $InstallApps is either $true or $false.
- Added new function Export-ConfigFile. When passing -ExportConfigFile 'Path\To\ConfigFile.json' the script will generate a parameter dump of all of the configured parameters
- Added driver folder validation to throw an error if spaces are detected in the folder name of the drivers folder (e.g. C:\FFUDevelopment\Drivers\Dell 3190). This is due to an issue with Dell drivers and their inability to handle paths with spaces consistently.
- Added back the Windows Security Platform update which grabs it from the web instead of the Microsoft update catalog
- Fixed an issue where the Drivers folder was being completely deleted instead of its sub-folders
- Removed the Requires -PSEdition Desktop. The script works with both Desktop and Core, so pwsh 7 is fine.
- Created a new config folder to hold config files. A new sample_default.json file is provided to show what the format looks like.
- You can now set the computername in the unattend.xml file whereever you want. Prior it required that the computername was the first component element.
2024-12-18 16:10:35 -08:00
Zehadi Alam ddbf2b0339 Use bcdedit to set Windows Boot Manager and default Windows boot loader to be first in the display order of UEFI firmware 2024-09-05 17:57:35 -04:00
rbalsleyMSFT 7d74feec0c - Fix an issue with removal of Defender/OneDrive/Edge after FFU is complete
- Migrate Winget downloads to use Export-WingetPackage cmdlet as per issue Known Issue: Winget downloads fail on Non-English OS #50
- Add better logging when unable to find HDD when applying FFU
2024-09-04 13:20:35 -07:00
rbalsleyMSFT bcb9911cd0 Small update to fix a logging issue with script run time duration 2024-08-07 13:01:26 -07:00
rbalsleyMSFT b20b614f5e update changelog.md and ApplyFFU.ps1 to 2408.1 2024-08-06 17:39:13 -07:00
rbalsleyMSFT 5600b2fbbd fixed issues creating deploy media for VMs, cleaned up some old commented code in ApplyFFU.ps1 2024-07-19 19:17:02 -07:00
rbalsleyMSFT bd8d0efd66 Merge pull request #39 from zehadialam/minor-fixes
Minor Fixes
2024-07-17 14:27:09 -07:00
Zehadi Alam 5616082275 Add conditional check to not run clear-disk on new drives that are uninitialized 2024-07-17 00:14:00 -04:00
Zehadi Alam 8100df3d24 Add diskpart commands to assign GPT attributes to recovery partition 2024-07-16 23:43:35 -04:00
rbalsleyMSFT a91a417a08 Merge pull request #35 from mhaley/patch-1
Assign drive letter to recovery partition before modification
2024-07-09 09:28:30 -07:00
Matthew Haley 3f0377fbf9 Assign drive letter to recovery partition before modification
Assign drive letter so copy succeeds, remove when finished.
2024-07-08 13:45:44 -07:00
rbalsleyMSFT 7a0dd3435c Fixed a logic issue when downloading ARM KBs 2024-07-01 10:09:11 -07:00
rbalsleyMSFT 08e354ad17 updated version in applyffu.ps1 2024-06-17 12:08:01 -07:00
rbalsleyMSFT 12edabf213 Changed version to 2405.1 2024-05-24 15:29:05 -07:00
rbalsleyMSFT ae59183a19 update issue with downloading latest Windows CU 2024-05-03 15:32:11 -07:00
rbalsleyMSFT 5564473c3b Merge branch 'main' of https://github.com/rbalsleyMSFT/FFU 2024-04-18 16:11:58 -07:00
rbalsleyMSFT 393de977f2 2404.2 when imaging devices with 4096 logical sector sizes, will set $copydrivers to $true if $installdrivers set to $true 2024-04-18 16:10:16 -07:00
rbalsleyMSFT a9cafe8950 Merge pull request #20 from JoeMama54/patch-2
Remove spaces from Computer Name
2024-04-15 10:54:20 -07:00
rbalsleyMSFT 79364e334d Reverted recovery partition code back 2024-04-15 10:53:41 -07:00
Rob 8e5099ad7a Remove spaces from Computer Name 2024-04-13 00:26:32 -06:00
rbalsleyMSFT 3b1e2a8fd2 Update script version to 2403.1 2024-03-22 17:42:45 -07:00
rbalsleyMSFT c7cef66aff count folders within drivers folder, not all objects. 2024-03-08 16:23:42 -08:00
rbalsleyMSFT 980ba025a3 added $CopyPPKG, $CopyUnattend, $CopyAutopilot, and $CompactOS variables and fixed some logging 2024-03-08 10:31:47 -08:00
rbalsleyMSFT aee1aa1e95 2401.1 update 2024-01-26 14:28:38 -08:00
rbalsleyMSFT ed3fcf1a3d Fixed bug with Windows Update failing to install updates for VHDX-only captures. 2023-12-14 15:32:14 -08:00
rbalsleyMSFT 131d7920bf Changed USB build functionality 2023-09-12 13:12:48 -07:00
rbalsleyMSFT 34efbda7ec Fixed an issue with Critical Process Died BSOD
When using -installapps $false when capturing a FFU, a Critical Process Died BSOD would happen when deploying the FFU and Windows attempted to load.

When capturing the FFU, the registry is loaded to grab the Windows version information to create the FFU file name. After unloading the registry, the FFU is captured. This process can happen too fast on certain hard drives (NVME). A 15 second delay was added after the unloading of the registry to allow for the process to complete before the FFU is captured.
2023-09-07 10:32:58 -07:00
rbalsleyMSFT f28281671e Fixed an issue with manually naming a device. Updated version string 2023-06-29 12:04:27 -07:00
rbalsleyMSFT a81261fa6b Removed the need for Insider ADK but still allow optimize FFU
Optimize-FFU is broken due to the Recovery partition not having a name. dism checks for the presence of a name for each partition and if it doesn't have one, optimize-FFU breaks. The fix is in the ffuprovider.dll in the 25255 branch, which is in the Insider ADK. The public release for that isn't coming soon, and using the Insider ADK requires test signing/test mode to be turned on and secureboot disabled. This causes issues with systems that have virtualization-based security. Due to this, changing the code back to not creating a recovery partition while building the FFU, and creating the recovery partition during deployment and then letting Windows copy in and configure WinRE after. Later this year, whenever the ADK gets released, I'll update the script to revert this behavior.
2023-05-25 12:30:21 -07:00
rbalsleyMSFT 4b959df197 Updated files 2023-02-27 15:31:49 -08:00
rbalsleyMSFT d06f7a884e Reorganized files into FFUDevelopment folder 2023-02-15 17:14:41 -08:00