I tested the modified "GenerateUpdateList_L2_only" script alongside my download script before running the main script, so that all the updates would already be downloaded in the UUP folder. It worked well, without errors.
Hello, @SunLion I’ve made some adjustments to the script—there will be a single script for all versions, and GenerateUpdateList.ps1 will download the updates based on the selected ISO file. If I’m successful, I’ll share it with you for testing. So far, I’ve tried it three times: 24H2—OK! 25H2—OK. I haven’t tried 26H1 yet. The GenerateUpdateList.ps1 file checks the UUP folder based on the selected version. If there’s an old MSU or CAB file, it deletes it (to avoid conflicts), but if the same one already exists, it skips the download and proceeds with the update. I have a question: Regarding the update: the update files open and prepare, which is fine, but first `ResetBase` is run, and then the update is applied. What’s the logic here? Shouldn’t it be the other way around? I couldn’t figure it out. I reversed the order—I moved the `ResetBase` step to after the update integration—and didn’t encounter any issues, but the size differed by 300 MB. I’m not sure if that’s the reason… I’m looking into it…
Good afternoon, my friend, The `ResetBase` command is executed only before the .NET 3.5 activation process. If .NET 3.5 is enabled via W10UI, it won't be possible to perform the `ResetBase` afterwards. Since we intend to remove various items after running W10UI, the process is structured as follows: 1 - W10UI completed 2 - Removal of AppxPackages, Capabilities, Features, etc. 3 - Application of various tweaks 4 - Removal of WinRE.wim Only after all that is done do we perform the `ResetBase` and then enable .NET 3.5. And once .NET 3.5 is enabled, the updates need to be reintegrated so they aren't requested during Windows Update. Does that make sense? Sorry about my English...
Now I understand it much better—thank you so much... I completely missed Netfx35. I'm continuing with the test
I got mixed up in my reply but corrected it right after. The fact is, the `resetbase` has to be performed before enabling `net35`. That’s because, with `net35` enabled, your package enters a pending state and no longer allows the `resetbase`.
Yes, I understand—it’s a smart method and correct. Whichever ISO file I’m working with will determine the version, but it won’t upgrade it; I removed that part. So, if it’s running 25h2, it should be that ISO; if it’s running 24h2, it should be that ISO, and so on. Since I’ve never used Netfx35, I guess I didn’t understand that part and had removed it—I’ll put it back in. Your method is the correct one. I also added an additional check to the GenerateUpdateList.ps1 file; without it, the script won’t run without an LCU. Here's my code: Code: echo. ECHO. ECHO ============================================================ ECHO Generating update list for Build %Build% ^(all.txt^) ECHO ============================================================ powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0DATA\Scripts\GenerateUpdateList.ps1" -Build "%Build%" -OutputFile "%~dp0DATA\UUP\all.txt" findstr /I /R /C:";LCU" /C:";L1" /C:";L2" "%~dp0DATA\UUP\all.txt" >nul if errorlevel 1 ( echo. echo WARNING: all.txt has no LCU/L1/L2 entry - retrying update list generation once... powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0DATA\Scripts\GenerateUpdateList.ps1" -Build "%Build%" -OutputFile "%~dp0DATA\UUP\all.txt" findstr /I /R /C:";LCU" /C:";L1" /C:";L2" "%~dp0DATA\UUP\all.txt" >nul if errorlevel 1 ( echo. echo ############################################################ echo FATAL: all.txt STILL has no LCU/L1/L2 entry after retry. echo The cumulative update would be MISSING from this image. echo Check your internet connection / catalog.update.microsoft.com echo reachability, then re-run. Build is halted so this doesn't echo silently ship without the monthly security update. echo ############################################################ pause goto end ) ) I’d also like to add that when I ran the CODSecureAttestationWizard.exe file, which performs security checks for “Call of Duty,” it kept returning an error. This error was caused by ‘Wdboot’ and “Meltdown-Spectre.” After commenting out those lines, the install. wim file successfully passes the security scan—in other words, the script is very robust and secure; I’ve tested it.
On 28000 I couldn't get bluetooth working at first. The PC wasn't finding or got detected by other BT devices. The bluetooth UI was working, drivers were installing without an issue. Event viewer led me to bthserv. This service is listed as being disabled for performance in W1126H1.cmd. Perhaps it shouldn't be there by default.
Hello again, As we run tests, new ideas emerge, new bugs get fixed, and new code and updates are added. This time, I tried something a little different, and it worked—here’s what I did: If the GenerateUpdateList.ps1 file is called using the code below, Code: if "%DEBUG%"=="1" goto skipUpdate echo. ECHO. ECHO ============================================================ ECHO Generating update list for Build %Build% ^(all.txt^) ECHO ============================================================ powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0DATA\Scripts\GenerateUpdateList.ps1" -Build "%Build%" -OutputFile "%~dp0DATA\UUP\all.txt" findstr /I /R /C:";LCU" /C:";L1" /C:";L2" "%~dp0DATA\UUP\all.txt" >nul if errorlevel 1 ( echo. echo WARNING: all.txt has no LCU/L1/L2 entry - retrying update list generation once... powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0DATA\Scripts\GenerateUpdateList.ps1" -Build "%Build%" -OutputFile "%~dp0DATA\UUP\all.txt" ) findstr /I /R /C:";LCU" /C:";L1" /C:";L2" "%~dp0DATA\UUP\all.txt" >nul if errorlevel 1 ( echo. echo ############################################################ echo WARNING: all.txt STILL has no LCU/L1/L2 entry after retry. echo The cumulative update would be MISSING from this image. echo Check your internet connection / catalog.update.microsoft.com echo reachability if this is unexpected. echo ############################################################ SET "NoLCUFound=1" ) else ( SET "NoLCUFound=0" ) if "%NoLCUFound%"=="1" ( echo. ECHO =========================================================== echo Continue the build WITHOUT the cumulative update ^? ECHO =========================================================== ECHO. ECHO [ E ] - Yes, continue without an LCU (only Ndp and DU are integrated) ECHO. ECHO [ H ] - No, exit the script (the process is terminated) ECHO. ECHO =========================================================== ) :AskLCUChoice if "%NoLCUFound%"=="1" ( SET "LCUCHOICE=" SET /P LCUCHOICE="* Type your option and press Enter (E/H): " IF /I "%LCUCHOICE%"=="E" goto LCUChoiceMade IF /I "%LCUCHOICE%"=="H" goto end echo Invalid choice, please type E or H. goto AskLCUChoice ) :LCUChoiceMade echo. ECHO. ECHO ============================================================ ECHO Removing stale update files no longer listed in all.txt ECHO ============================================================ for %%f in ("%~dp0DATA\UUP\*.msu" "%~dp0DATA\UUP\Windows1*-KB*.cab" "%~dp0DATA\UUP\RCU-*.cab" "%~dp0DATA\UUP\SSU-*.cab") do ( if exist "%%~f" ( findstr /I /C:"%%~nxf" "%~dp0DATA\UUP\all.txt" >nul if errorlevel 1 ( echo Removing stale file: %%~nxf del /f /q "%%~f" >nul 2>&1 ) ) ) 1- If GenerateUpdateList.ps1 successfully finds an update, the script continues without asking any questions. 2- If it cannot find and write an LCU to the all.txt file, it will ask a question: [ E ] - Yes, continue without LCU (only Ndp and DU are integrated) [ H ] - No, exit the script (the process is terminated) We can think of this as a control system to ensure it works more reliably. You can test it—I think the results show a much better and more secure control mechanism. What do you think? If you have any suggestions, I can add them.
I am very grateful for your efforts on this script. I will run some tests and report back with the results. I’d like to share a thought I have on this: I believe the best way to download the updates is by using the additional script "_PreDownloadAllUpdates.cmd". Why? In many cases, a URL might not be identified correctly—or other issues might arise—forcing the main script to stop running. And that’s not ideal. By using the "_PreDownloadAllUpdates.cmd" script—which should be run *before* the main script—you can (and should) run it as many times as necessary until all the updates have been downloaded. The GenerateUpdateList.ps1 script will be used in conjunction with "_PreDownloadAllUpdates.cmd," making it very useful since we won't need to manually update the all.txt file. Let's see how things go. We'll do whatever works best for actual use. Best regards!
Thanks for your help! I'll add an option for this to the script. EDIT: Added an option to the script to toggle Bluetooth on or off. It will be included in the next version of the 26H1_Creator script.
Changes to the GenerateUpdateList.ps1 script Business forced transition to 25H2. LTSC / IoT LTSC remain on 24H2. For Business, KB5054156 (25H2 Enablement Package) is automatically integrated before running GenerateUpdateList.ps1. After KB5054156 is installed, the script detects Business as Windows 11 25H2 and downloads the corresponding 25H2 LCU / .NET / SafeOS updates. For LTSC and IoT LTSC, KB5054156 is not integrated, so they continue to operate as 24H2. In other words, KB5054156 became the 24H2 - 25H2 branch switch specifically for Business, without the need to rebuild install.wim.
Thanks for the help, Sergey. I was thinking about exactly that. That line of reasoning makes sense. But I spent the whole day working on the 26H1_Creator script to adjust it to the changes. And so far, it’s been a success. Now I plan to move on to working on the 2xH2_Creator script, which handles 24H2 and 25H2. I really appreciate everyone's help!
========================= 26H1_Creator_2.1_8 ========================= Updated to 28000.2704 - Add the scripts "PackageSelector.ps1" and "GenerateUpdateList.ps1" (by @mustafa gotr/@otvertka/@sergey130270) - Add an option to disable Bluetooth - Add an option to remove WebView2 - Add an option to remove EdgeBrowserInterface - Add an option to use image with VENTOY - Other minor adjustments ============================================================================= Please read the Changelog.txt and _HowToUse_26H1_Creator.chm files before using the script =============================================================================
Hi @mustafa gotr, @otvertka and @sergey130270 The test with version 26H1 went very well, with no errors. Thanks for the help!
You did a great job—thank you so much. I’ll have time tomorrow, and I’ll definitely test it out. I’m thrilled to see the project grow with each new addition—it’s wonderful...
What I’ve observed in my experiments proves that Enablement packages (enablement files) sometimes fail to perform a clean upgrade and leave a hybrid structure in the system registry, completely misleading third-party security and testing software. In other words, there’s no problem with your hardware or BIOS; the issue stems entirely from the software’s inability to correctly interpret this “patch” system. I wanted to write this to warn you: if you run the “Call of Duty” test and get an error, the cause is the “Enablement” file—do not update your BIOS! There’s no workaround for this; I tried very hard, but unfortunately, the only solution is to use the original files—the original 24H2 or 25H2 ISO files. I’ve attached a screenshot of the error;
Guys I ran the script & pre downloaded the three required updates for 28000 Having this issue whilst script is attempting to integrate the updates?
This can happen... You need to run the _PreDownloadAllUpdates.cmd script more than once, until all updates have been downloaded.
Slimdown11 – turn Windows 11 or LTSC 2024 into classic/legacy Windows I'm unsure what the topic means. Is there two parts to the topic? Slimdown11, then turn results to classic windows? Take Slimdown11. Does that mean reduce the size of the installed OS or is it removing apps the slimdown. I've been following this topic on/off for a while and not seeing "Customer Satisfaction". In other words, I'm seeing a lot of "Likes", but not seeing people saying much on how this actually slims down their OS. A couple of days ago curiosity got the better of me, and I ran you scripts, including building the ISO file. Installed it to a empty drive. I was somewhat surprised that the size of the install was 24+ GB. My Windows install is around 16 to 17 GB. I use dism++, bleachbit, and some other programs to slim down my system. Edit: also I use "Raphine/Win11Debloat" to debloat my installed OS. That is how I get to 16+GB installed system So my question is, what exactly is being "Slimdown", from your scripts?