Windows feature upgrade orchestration for legacy Windows 10 through current Windows 11, with interactive TUI flows, headless automation, resume checkpoints, media acquisition, and USB creation.
Specification | Third-Party Notices | License
wfu-tool is a Windows-only PowerShell upgrade tool built to move machines across supported Windows feature releases with real orchestration instead of one-off scripting.
It can:
- detect the current Windows release and build a valid upgrade path
- sequentially upgrade from old Windows 10 releases through newer Windows 10 and Windows 11 targets
- perform direct target upgrades through ISO/media flows
- run interactively or headlessly from CLI and
.iniconfig - persist checkpoints and resume after reboot
- acquire media from multiple Microsoft-backed sources with source-health controls
- create bootable USB media from staged ISO content
- apply compatibility and policy workarounds needed for difficult upgrade paths
- Windows 10 and Windows 11 targets are separated in the interactive selector
- Headless automation supports
CLI > INI > checkpointresolution - Dead sources stay selectable without being auto-picked
- Legacy Windows 10 media support is built in through a pinned manifest layer
- Resume is checkpoint-driven, with scheduled-task and
RunOncebootstrap support - The repo includes CI, packaging, release, winget, and Chocolatey scaffolding
- wfu-tool.ps1: main engine
- launch-wfu-tool.ps1: interactive launcher
- launch-wfu-tool.bat: elevation-friendly batch entrypoint
- resume-wfu-tool.ps1: post-reboot resume wrapper
- wfu-tool-windows-update.ps1: direct Windows Update metadata client
- modules: upgrade, automation, media, USB, and helper modules
- tests: script-based validation suite
- devscripts: CI, packaging, release, and developer utilities
.\launch-wfu-tool.ps1Or via batch:
launch-wfu-tool.bat.\wfu-tool.ps1 -Mode Headless -TargetVersion 25H2 -NoReboot.\wfu-tool.ps1 -Mode CreateUsb -TargetVersion 25H2 -UsbDiskNumber 3.\resume-wfu-tool.ps1 -ResumeFromCheckpointwfu-tool supports .ini-driven automation.
Example:
[general]
mode=headless
target_version=25H2
download_path=C:\wfu-tool
no_reboot=true
allow_fallback=true
[sources]
preferred_source=WU_DIRECT
allow_dead_sources=false
[usb]
create_usb=false
partition_style=gpt
[resume]
enabled=true
resume_from_checkpoint=trueUse it like this:
.\launch-wfu-tool.ps1 -Headless -ConfigPath .\configs\job.iniThe engine uses normalized source IDs across CLI, config, logs, and selection logic:
WU_DIRECTESD_CATALOGFIDOMCTASSISTANTWINDOWS_UPDATELEGACY_XMLLEGACY_CABLEGACY_MCT_X64LEGACY_MCT_X86
Source health is first-class:
healthy: selectable and auto-eligibledegraded: selectable and auto-eligible, but warneddead: selectable only when explicitly requested
The tool keeps session state in a checkpoint file and can re-enter after reboot without forcing the user to rebuild the run manually.
It also performs or supports:
- pending reboot detection
- disk space checks
- network readiness checks
- DISM and SFC health repair
- media reuse where possible
- diagnostics capture on failure
This is still a Windows upgrade tool. It touches registry, scheduled tasks, services, update state, and optionally USB disks. It should be run elevated and intentionally.
The repository includes a Windows GitHub Actions pipeline in ci-release.yml with this order:
formattypelinttestbuild_testpackagerelease / publish
Release versioning uses calendar tags in YY.N format, for example:
26.126.2
Packaging and release helpers live in:
- Package.ps1
- Build-Test.ps1
- Get-ReleaseVersion.ps1
- Publish-GitHubRelease.ps1
- Publish-Winget.ps1
- Publish-Chocolatey.ps1
Run the full suite:
.\tests\Test-Runner.ps1Useful targeted checks:
.\devscripts\Check-Type.ps1
.\devscripts\Check-Lint.ps1
.\devscripts\Build-Test.ps1
.\devscripts\Package.ps1 -Version 26.1- This project is Windows-only.
- Administrator rights are required for real upgrade and USB flows.
- Some live Microsoft endpoints can be unstable or change over time.
- Legacy support exists in code and source planning, but old Microsoft media endpoints are not equally reliable.
