Upgrade Windows 11 Build to 24H2

I would like to upgrade lots of computers in my company to Windows 11 Build 24H2.

Is it possible?

If so, how would I go about doing this?

TIA!

Hello.
You can use BigFix OSD, see the documentation here: Installing Windows 10/11 or Windows Server using in-place upgrade
Thanks,
Mariano from BigFix OSD L3 Support

I don’t see it in my BigFix…

Do you have the BigFix LifeCycle license?

I see only patch management.

Just to clarify, are you referring to upgrading devices already on Windows 11 to feature update 24H2 or are you talking about upgrading Windows 10 machines to Windows 11 24H2?

I have computers on WIndows 11 23H2 and I want to update them to Windows 11 24H2.

Normally for Windows 11 feature updates you could use an enablement package to upgrade feature updates, but my understanding is that there will not be an enablement package for 24H2 because it requires a full OS upgrade (In-place upgrade) where 22H2 and 23H2 feature updates were only partial upgrades.
Because of this I don’t believe BigFix will have an enablement package available since Microsoft isn’t releasing one. You would have to use OSD or some variation of upgrade through the Windows 11 24H2 iso.

Windows 11, version 24H2: What’s new for IT pros - Windows IT Pro Blog

Is there an enablement package for this release?
No. Windows 11, version 24H2 requires a full OS swap so it cannot be deployed using servicing technology. In addition, devices must be running Windows 11, version 23H2 or 22H2 with the May 2024 non-security preview update installed in order to update to version 24H2.

1 Like

Thanks for the info!

You might be able to make use of the Windows 11 Business Edition Version 24H2 upgrade fixlets in Patches for Windows as a starting point for building your own process. Out of the box, they are intended to upgrade Windows 10 machines. You’ll have to validate that mounting an ISO and running the installation from there will work on those Windows 11 machines in your environment.

I believe straffin and atlauren were doing something similar in this post.
Distributing large files to clients - Usage and Config - BigFix Forum

First time sharing an action script here. Not sure how to get indentation in scriptblocks, my apologies!

Fill out the correct parameters for the prefetch block (url, sha, etc.) and then change the Iso parameter to the correct file name for your ISO. You may also need to change VolumeName parameter just beneath that.

Works 100%. Let me know if you need help.

// Download files
begin prefetch block
	add prefetch item name=xxx size=xxx url=xxx sha256=xxx
	collect prefetch items
end prefetch block

extract xxx

// Dismount ISO if it's already mounted
parameter "Iso" = "{(pathname of client folder of current site) & "\__Download\SW_DVD9_WIN_PRO_11_24H2.3_64BIT_ENGLISH_PRO_ENT_EDU_N_MLF_X23-93530.ISO"}"
parameter "VolumeName" = "CPBA_X64FRE_EN-US_DV9"

if {exists drives whose (volume of it = (parameter "VolumeName"))}
    waithidden powershell -Command "Get-Volume | Where-Object {{ $_.FileSystemLabel -match '{parameter "VolumeName"}' } | ForEach-Object {{ Dismount-DiskImage '{parameter "Iso"}' }"
endif

// Mount ISO
waithidden powershell -Command "Mount-DiskImage '{(parameter "Iso")}'"

// Find the setup exe of the mounted ISO
parameter "SetupExe" = "{(name of drives whose (volume of it = (parameter "VolumeName"))) & "\setup.exe"}"

// Create log folder if not detected
parameter "LogDir" = "C:\Win11Upgrade"

if {not exists folder (parameter "LogDir")}
    folder create {parameter "LogDir"}
endif

// Check if Windows can be upgraded
waithidden {parameter "SetupExe"} /Auto Upgrade /Quiet /Eula Accept /Compat ScanOnly /DynamicUpdate Disable /CopyLogs {parameter "LogDir"}
parameter "ScanExitCode" = "{exit code of action}"

// Continue only if exit code indicates Windows can successfully upgrade
continue if {parameter "ScanExitCode" = "-1047526896"}

// Begin upgrade
waithidden {parameter "SetupExe"} /Auto Upgrade /Quiet /Eula Accept /DynamicUpdate Disable /NoReboot /CopyLogs {parameter "LogDir"}

// Wait an extra 5 minutes to give log file additional time to populate potential errors
parameter "Time" = "{now}"
pause while {now < (parameter "Time" as time + 5 * minute)}

// Continue only if log file do not indicate failures
parameter "LogFile" = "{parameter "LogDir"}\Panther\setuperr.log"
continue if {exists file (parameter "LogFile") whose (not exists line whose (it as lowercase contains "abort" or it as lowercase contains "abandoning") of it)}

EDIT: Made minor tweaks.

2 Likes

Thanks for sharing!

Pad pad oad