Slimdown11 – turn Windows 11 or LTSC 2024 into classic/legacy Windows

Discussion in 'Windows 11' started by SunLion, Mar 2, 2025.

  1. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,721
    6,563
    60
    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.
     

    Attached Files:

  2. sainfo

    sainfo MDL Addicted

    Dec 6, 2021
    707
    1,590
    30
    #2162 sainfo, Aug 20, 2026 at 06:19
    Last edited: Aug 20, 2026 at 13:52
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  3. otvertka

    otvertka MDL Member

    Aug 13, 2009
    109
    253
    10


    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…
     
  4. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,721
    6,563
    60
    #2164 SunLion, Aug 20, 2026 at 20:03
    Last edited: Aug 20, 2026 at 20:12
    (OP)

    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...
     
  5. otvertka

    otvertka MDL Member

    Aug 13, 2009
    109
    253
    10
    Now I understand it much better—thank you so much... I completely missed Netfx35. I'm continuing with the test
     
  6. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,721
    6,563
    60
    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`.
     
  7. otvertka

    otvertka MDL Member

    Aug 13, 2009
    109
    253
    10
    #2167 otvertka, Aug 21, 2026 at 07:03
    Last edited: Aug 21, 2026 at 07:16
    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.
     

    Attached Files:

  8. redsunset

    redsunset MDL Member

    Mar 16, 2022
    199
    101
    10
    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.
     
  9. otvertka

    otvertka MDL Member

    Aug 13, 2009
    109
    253
    10
    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.
     

    Attached Files:

  10. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,721
    6,563
    60
    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!
     
  11. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,721
    6,563
    60
    #2171 SunLion, Aug 21, 2026 at 14:59
    Last edited: Aug 21, 2026 at 15:46
    (OP)
    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.
     
  12. sergey130270

    sergey130270 MDL Senior Member

    May 15, 2014
    350
    558
    10
    #2172 sergey130270, Aug 21, 2026 at 19:42
    Last edited: Aug 21, 2026 at 20:25
    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.
     

    Attached Files:

  13. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,721
    6,563
    60
    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!
     
  14. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,721
    6,563
    60
    =========================
    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
    =============================================================================

     
  15. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,721
    6,563
    60
  16. otvertka

    otvertka MDL Member

    Aug 13, 2009
    109
    253
    10
    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...
     
  17. otvertka

    otvertka MDL Member

    Aug 13, 2009
    109
    253
    10
    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;
     

    Attached Files:

  18. Mavericks Choice

    Mavericks Choice MDL Guru

    Aug 5, 2015
    4,405
    17,028
    150
    Guys I ran the script & pre downloaded the three required updates for 28000
    Having this issue whilst script is attempting to integrate the updates?
     

    Attached Files:

  19. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,721
    6,563
    60
    This can happen...

    You need to run the _PreDownloadAllUpdates.cmd script more than once, until all updates have been downloaded.
     
  20. verndog

    verndog MDL Senior Member

    May 3, 2010
    280
    126
    10
    #2180 verndog, Aug 23, 2026 at 02:36
    Last edited: Aug 23, 2026 at 17:32
    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?