Le mieux, bien sûr, est de faire ses updates sur une fresh install clean à chaque fois pour éviter ces accumulations.
Avant:

Après le script pour exemple mais tout ce fera automatisé en gardant le dernier update:

--Cependant ils sont en mode "permanent" .
Elles sont situés dans \Windows\servicing\Packages dans les fichiers .mum :
Avec le nom de: Package_for_ServicingStack_ puis le numéro de version (sauf pour la version d'origine 1220= 1288 qui n'avait pas la meme terminologie)
exemple : Package_for_ServicingStack_4892~31bf3856ad364e35~amd64~~19041.4892.1.0.mum
--Ils sont protéger en Trusted
Vous pouvez les modifier avec Notepad++ via PowerRun ou Nsudo
--Pour voir ses mises a jours installées en commande batch ou PowerShell ou avec DISM++ ou autre:
Code : Tout sélectionner
Get-HotFix
control /name Microsoft.WindowsUpdate /page History
appwiz.cpl
wmic qfe list
Edit: Ajout du numéro de version donc la v 1.0===> Pour les désinstallés proprement j'ai donc creer un script batch .cmd:
Edit : Grosse Amélioration faite en v.1.1 du 27/06/2025 tout automatisé:
Le code en batch .cmd
Code : Tout sélectionner
@set ver=1.1 du 27-06-2025
@echo off
rem == Gérer les caractères spéciaux en UTF-8 ==
chcp 65001 >nul
color b0
mkdir temp 2>nul
echo ------------------------------------------------------------------------------------------
echo ================ del_SSU_modif_permanent_Script version %ver% ================
echo ------------------------------------------------------------------------------------------
setlocal enabledelayedexpansion
:askPath
REM Demande à l'utilisateur de spécifier le dossier de montage
set /p "mountDir=Entrez le chemin du dossier de montage : "
REM Vérifie si le chemin est "C:" sans antislash
if /i "%mountDir%"=="C:" (
echo Erreur : le chemin "C:" est incomplet. Il manque un "\". Utilisez "C:\" si c'est une image Online.
echo Appuyez sur une touche pour réessayer ou fermez la fenêtre pour quitter.
pause >nul
echo.
goto askPath
)
REM Vérifie si le dossier de montage existe
if not exist "%mountDir%" (
echo Le dossier de montage "%mountDir%" n'existe pas.
echo Appuyez sur une touche pour réessayer ou fermez la fenêtre pour quitter.
pause >nul
echo.
goto askPath
)
REM Chemin vers le dossier de Packages
set "packageDir=%mountDir%Windows\servicing\Packages"
if not exist "%packageDir%" (
echo Le dossier "%packageDir%" n'existe pas.
echo Appuyez sur une touche pour réessayer ou fermez la fenêtre pour quitter.
pause >nul
echo.
goto askPath
)
REM Initialisation
set "files="
set "maxVer=0"
set "minVer=99999"
set "latestPkg="
set "oldestPkg="
REM Récupération des fichiers et extraction des versions
for %%f in ("%packageDir%\Package_for_ServicingStack*.mum") do (
set "fname=%%~nxf"
set "files=!files! %%~nxf"
REM Extraire la version en fonction du séparateur (_ ou ~)
set "verNum="
set "str=!fname:Package_for_ServicingStack_=!"
if "!str!"=="!fname!" (
REM Pas de underscore, essayer avec tilde
set "str=!fname:Package_for_ServicingStack~=!"
REM Si toujours pas modifié, ignorer
if "!str!"=="!fname!" (
set "str="
)
)
if defined str (
set "verNum=!str:~0,4!"
REM Vérifier si verNum est numérique
for /f "delims=0123456789" %%a in ("!verNum!") do set "verNum="
if defined verNum (
REM Mise à jour du plus récent
if !verNum! gtr !maxVer! (
set "maxVer=!verNum!"
set "latestPkg=!fname!"
)
REM Mise à jour du plus ancien
if !verNum! lss !minVer! (
set "minVer=!verNum!"
set "oldestPkg=!fname!"
)
)
)
)
echo ------------------------------------------------------------------------------------------
echo ================ Modification des SSU en "removable" pour leurs suppressions ================
echo ------------------------------------------------------------------------------------------
REM Cas particulier : si on détecte un package avec tilde 1220, forcer oldestPkg à celui-ci
for %%f in (!files!) do (
echo %%f | findstr /i /c:"Package_for_ServicingStack~" >nul
if !errorlevel! == 0 (
set "oldestPkg=%%f"
goto skipOldestCheck
)
)
:skipOldestCheck
echo.
echo Package le plus ancien (conservé en permanent) : !oldestPkg!
echo Package le plus récent (conservé en permanent) : !latestPkg!
echo.
REM Modification des fichiers sauf les deux extrêmes
for %%f in (!files!) do (
if /i not "%%f"=="!latestPkg!" if /i not "%%f"=="!oldestPkg!" (
set "inputFile=%packageDir%\%%f"
set "tempFile=!inputFile!.tmp"
if exist "!inputFile!" (
(
for /f "usebackq delims=" %%a in ("!inputFile!") do (
setlocal enabledelayedexpansion
set "line=%%a"
set "line=!line:permanent=removable!"
echo !line!
endlocal
)
) > "!tempFile!"
move /y "!tempFile!" "!inputFile!" >nul
echo Modifié : %%f
)
)
)
echo ------------------------------------------------------------------------------------------
echo ================ Suppression Ancien SSU modifié ================
echo ------------------------------------------------------------------------------------------
REM Définir la variable dismImageOption selon mountDir
if /i "%mountDir%"=="C:\" (
set "dismImageOption=/Online"
) else (
set "dismImageOption=/Image:%mountDir%"
)
REM Suppression sauf le plus ancien et le plus récent
for %%f in (!files!) do (
if /i not "%%f"=="!latestPkg!" if /i not "%%f"=="!oldestPkg!" (
set "pkgName=%%f"
setlocal enabledelayedexpansion
set "pkgName=!pkgName:.mum=!"
dism /scratchdir:temp !dismImageOption! /Remove-Package /PackageName:!pkgName!
endlocal
)
)
echo ------------------------------------------------------------------------------------------
echo ================ Nettoyage fichiers sauvegarde de Windows Update via DISM ================
echo ------------------------------------------------------------------------------------------
dism !dismImageOption! /Cleanup-Image /StartComponentCleanup
rd /s /q temp 2>nul
pause
exit
Comment s'en servir ?
- Ouvrir le script avec les autorisations Trusted via PowerRun (juste a glisser votre fichier .cmd dedans) ou avec Nsudo
Il vous demandera d' Entrer votre chemin "path" de votre dossier de montage de l'Iso
Release v1.1
- Il modifie la valeur (permanence="permanent">) en (permanence="removable">) de plusieurs fichier en même temps dans un dossier de montage extrait d'un Iso.
- Accessible en Online et en Offline et correction du bon chemin avec \ si erroné
- Prends en compte la version minimale installé sans la modifié (idéal pour du propre, la SSU 1220=1288 pour du LTSC d'origine) pour pas faire planté le système
- Prends en compte la version Updaté la plus récente sans la modifié en "removable" pour pas faire planté le système
- Effectue un nettoyage Dism /Cleanup-Image /StartComponentCleanup à la suite

