Manipulation d'une image d'installation
Il est possible avec DISM de monter un fichier d'installation de Windows ".wim" dans un dossier, de manipuler cette image et de créer un média d'installation personnalisé. L'avantage de ceci est qu'il est facile de réappliquer nos modifications lorsque l'on doit mettre à jour notre média plutôt que de réinstaller un système, recapturer son état et recréer un média d'installation complet.
Monter une image WIM
La commande "DISM /Mount-Image" permet d'accéder au contenu d'une image d'installation. Le dossier de montage doit être sur un volume supportant les points d'analyse. On ne peut donc pas monter un WIM sur un périphérique amovible. Elle peut être utilisée de la façon suivante :
PS F:\Lab-DISM> New-Item -Path E:\Scratch -Type Directory -Force
Directory: E:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2025-02-09 3:09 PM Scratch
PS F:\Lab-DISM> DISM /Mount-Image /ImageFile:install.wim /Index:1 /MountDir:E:\Scratch
Deployment Image Servicing and Management tool
Version: 10.0.22621.2792
Mounting image
[==========================100.0%==========================]
The operation completed successfully.
PS F:\Lab-DISM> Get-ChildItem E:\Scratch
Directory: E:\Scratch
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024-04-01 3:26 AM PerfLogs
d-r--- 2024-04-01 4:47 PM Program Files
d-r--- 2024-04-01 5:20 PM Program Files (x86)
d-r--- 2024-04-01 3:34 AM Users
d----- 2024-10-04 8:34 PM Windows
Il est maintenant possible de modifier ce qui sera copié sur le disque au moment de l'installation. On peut ici y modifier le registre, les AppxPackages, les squelettes de profil (HKU\.DEFAULT et C:\Users\Default), etc.
Personnaliser une image WIM
Commençons tout d'abord par accéder aux registres de l'image d'installation montée. Il faudra tout d'abord s'accorder les permissions pour accéder aux fichiers de registre en question. La commande "reg load" permet ici de charger les ruches d'un autre système en pointant vers un fichier source.
PS F:\Lab-DISM> reg load HKU\WIMDefault E:\Scratch\Users\Default\ntuser.dat
The operation completed successfully.
PS F:\Lab-DISM> reg load HKU\WIM-SOFTWARE E:\Scratch\Windows\System32\config\SOFTWARE
The operation completed successfully.
PS F:\Lab-DISM> reg load HKU\WIM-SYSTEM E:\Scratch\Windows\System32\config\SYSTEM
The operation completed successfully.
PS F:\Lab-DISM> New-PSDrive -Name HK-WIM-UDEFAULT -PSProvider Registry -Root HKEY_USERS\WIMDefault
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
HK-WIM-... Registry HKEY_USERS\WIMDefault
PS F:\Lab-DISM> New-PSDrive -Name HK-WIM-LMSOFTWARE -PSProvider Registry -Root HKEY_USERS\WIM-SOFTWARE
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
HK-WIM-... Registry HKEY_USERS\WIM-SOFTWARE
PS F:\Lab-DISM> New-PSDrive -Name HK-WIM-SYSTEM -PSProvider Registry -Root HKEY_USERS\WIM-SYSTEM
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
HK-WIM-... Registry HKEY_USERS\WIM-SYSTEM
Nous pourrons dorénavant appliquer des modifications de registre pour personnaliser le système avant même son installation.
Appliquons pour l'instant ces modifications.
Windows Registry Editor Version 5.00
[HKEY_USERS\WIM-SOFTWARE\Policies\Microsoft\Windows\DataCollection]
"AllowTelemetry"=dword:00000000
[HKEY_USERS\WIM-SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"VerboseStatus"=dword:00000001
[HKEY_USERS\WIM-SYSTEM\ControlSet001\Control\CrashControl]
"DisplayParameters"=dword:00000001
"DisableEmoticon"=dword:00000001
[HKEY_USERS\WIM-SYSTEM\ControlSet001\Control\Power\PowerThrottling]
"PowerThrottlingOff"=dword:00000001
[HKEY_USERS\WIM-SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile]
"NetworkThrottlingIndex"=dword:ffffffff
[HKEY_USERS\WIM-SYSTEM\ControlSet001\Control]
"WaitToKillServiceTimeout"="2000"
[HKEY_USERS\WIMDefault\Software\Policies\Microsoft\Windows\Explorer]
"DisableSearchBoxSuggestions"=dword:00000001
[HKEY_USERS\WIMDefault\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"ShowSecondsInSystemClock"=dword:00000001
"HideFileExt"=dword:00000000
"TaskbarAl"=dword:00000000
"TaskbarMn"=dword:00000000
"TaskbarDa"=dword:00000000
"ShowCopilotButton"=dword:00000000
[HKEY_USERS\WIMDefault\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32]
@=""
[HKEY_USERS\WIMDefault\Software\Policies\Microsoft\Windows\WindowsCopilot]
"TurnOffWindowsCopilot"=dword:00000001
[HKEY_USERS\WIMDefault\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize]
"SystemUsesLightTheme"=dword:00000000
"AppsUseLightTheme"=dword:00000000
Retirons quelques AppxPackages pour alléger l'installation. Vérifions tout d'abord ce qui y est installé.
PS F:\Lab-DISM> Get-AppxProvisionedPackage -Path "E:\Scratch" | Select-Object -Property PackageName
PackageName
-----------
Clipchamp.Clipchamp_3.0.10220.0_neutral_~_yxz26nhyzhsrt
Microsoft.ApplicationCompatibilityEnhancements_1.2401.10.0_neutral_~_8wekyb3d8bbwe
Microsoft.AV1VideoExtension_1.1.61781.0_neutral_~_8wekyb3d8bbwe
Microsoft.AVCEncoderVideoExtension_1.0.271.0_neutral_~_8wekyb3d8bbwe
Microsoft.BingNews_4.1.24002.0_neutral_~_8wekyb3d8bbwe
Microsoft.BingSearch_2022.0.79.0_neutral_~_8wekyb3d8bbwe
Microsoft.BingWeather_4.53.52892.0_neutral_~_8wekyb3d8bbwe
Microsoft.DesktopAppInstaller_2024.112.2235.0_neutral_~_8wekyb3d8bbwe
Microsoft.GamingApp_2024.311.2341.0_neutral_~_8wekyb3d8bbwe
Microsoft.GetHelp_10.2302.10601.0_neutral_~_8wekyb3d8bbwe
Microsoft.HEIFImageExtension_1.0.63001.0_neutral_~_8wekyb3d8bbwe
Microsoft.HEVCVideoExtension_2.0.61931.0_neutral_~_8wekyb3d8bbwe
Microsoft.MicrosoftOfficeHub_18.2308.1034.0_neutral_~_8wekyb3d8bbwe
Microsoft.MicrosoftSolitaireCollection_4.19.3190.0_neutral_~_8wekyb3d8bbwe
Microsoft.MicrosoftStickyNotes_4.6.2.0_neutral_~_8wekyb3d8bbwe
Microsoft.MPEG2VideoExtension_1.0.61931.0_neutral_~_8wekyb3d8bbwe
Microsoft.OutlookForWindows_1.0.0.0_neutral__8wekyb3d8bbwe
Microsoft.Paint_11.2302.20.0_neutral_~_8wekyb3d8bbwe
Microsoft.PowerAutomateDesktop_11.2401.28.0_neutral_~_8wekyb3d8bbwe
Microsoft.RawImageExtension_2.3.171.0_neutral_~_8wekyb3d8bbwe
Microsoft.ScreenSketch_2022.2307.52.0_neutral_~_8wekyb3d8bbwe
Microsoft.SecHealthUI_1000.26100.1.0_x64__8wekyb3d8bbwe
Microsoft.StorePurchaseApp_22312.1400.6.0_neutral_~_8wekyb3d8bbwe
Microsoft.Todos_2.104.62421.0_neutral_~_8wekyb3d8bbwe
Microsoft.VP9VideoExtensions_1.1.451.0_neutral_~_8wekyb3d8bbwe
Microsoft.WebMediaExtensions_1.0.62931.0_neutral_~_8wekyb3d8bbwe
Microsoft.WebpImageExtension_1.0.62681.0_neutral_~_8wekyb3d8bbwe
Microsoft.Windows.DevHome_0.100.128.0_neutral_~_8wekyb3d8bbwe
Microsoft.Windows.Photos_24.24010.29003.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsAlarms_2022.2312.2.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsCalculator_2021.2311.0.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsCamera_2022.2312.3.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsFeedbackHub_2024.125.1522.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsNotepad_11.2312.18.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsSoundRecorder_2021.2312.5.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsStore_22401.1400.6.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsTerminal_3001.18.10301.0_neutral_~_8wekyb3d8bbwe
Microsoft.Xbox.TCUI_1.23.28005.0_neutral_~_8wekyb3d8bbwe
Microsoft.XboxGamingOverlay_2.624.1111.0_neutral_~_8wekyb3d8bbwe
Microsoft.XboxIdentityProvider_12.110.15002.0_neutral_~_8wekyb3d8bbwe
Microsoft.XboxSpeechToTextOverlay_1.97.17002.0_neutral_~_8wekyb3d8bbwe
Microsoft.YourPhone_1.24012.105.0_neutral_~_8wekyb3d8bbwe
Microsoft.ZuneMusic_11.2312.8.0_neutral_~_8wekyb3d8bbwe
MicrosoftCorporationII.QuickAssist_2024.309.159.0_neutral_~_8wekyb3d8bbwe
MicrosoftWindows.Client.WebExperience_424.1301.270.9_neutral_~_cw5n1h2txyewy
MicrosoftWindows.CrossDevice_1.23101.22.0_neutral_~_cw5n1h2txyewy
MSTeams_1.0.0.0_x64__8wekyb3d8bbwe
Retirons quelques unes d'entre elles. En voici trois exemples, beaucoup plus peuvent être retirées.
PS F:\Lab-DISM> Remove-AppxProvisionedPackage -Path "E:\Scratch" -PackageName "MicrosoftCorporationII.QuickAssist_2024.309.159.0_neutral_~_8wekyb3d8bbwe"
Path : E:\Scratch
Online : False
RestartNeeded : False
PS F:\Lab-DISM> Remove-AppxProvisionedPackage -Path "E:\Scratch" -PackageName "Microsoft.WindowsFeedbackHub_2024.125.1522.0_neutral_~_8wekyb3d8bbwe"
Path : E:\Scratch
Online : False
RestartNeeded : False
PS F:\Lab-DISM> Remove-AppxProvisionedPackage -Path "E:\Scratch" -PackageName "Microsoft.YourPhone_1.24012.105.0_neutral_~_8wekyb3d8bbwe"
Path : E:\Scratch
Online : False
RestartNeeded : False
Après un petit ménage, la liste est beaucoup moins longue.
PS F:\Lab-DISM> Get-AppxProvisionedPackage -Path "E:\Scratch" | Select-Object -Property PackageName
PackageName
-----------
Microsoft.ApplicationCompatibilityEnhancements_1.2401.10.0_neutral_~_8wekyb3d8bbwe
Microsoft.AV1VideoExtension_1.1.61781.0_neutral_~_8wekyb3d8bbwe
Microsoft.AVCEncoderVideoExtension_1.0.271.0_neutral_~_8wekyb3d8bbwe
Microsoft.BingWeather_4.53.52892.0_neutral_~_8wekyb3d8bbwe
Microsoft.DesktopAppInstaller_2024.112.2235.0_neutral_~_8wekyb3d8bbwe
Microsoft.HEIFImageExtension_1.0.63001.0_neutral_~_8wekyb3d8bbwe
Microsoft.HEVCVideoExtension_2.0.61931.0_neutral_~_8wekyb3d8bbwe
Microsoft.MicrosoftStickyNotes_4.6.2.0_neutral_~_8wekyb3d8bbwe
Microsoft.MPEG2VideoExtension_1.0.61931.0_neutral_~_8wekyb3d8bbwe
Microsoft.Paint_11.2302.20.0_neutral_~_8wekyb3d8bbwe
Microsoft.RawImageExtension_2.3.171.0_neutral_~_8wekyb3d8bbwe
Microsoft.ScreenSketch_2022.2307.52.0_neutral_~_8wekyb3d8bbwe
Microsoft.SecHealthUI_1000.26100.1.0_x64__8wekyb3d8bbwe
Microsoft.StorePurchaseApp_22312.1400.6.0_neutral_~_8wekyb3d8bbwe
Microsoft.Todos_2.104.62421.0_neutral_~_8wekyb3d8bbwe
Microsoft.VP9VideoExtensions_1.1.451.0_neutral_~_8wekyb3d8bbwe
Microsoft.WebMediaExtensions_1.0.62931.0_neutral_~_8wekyb3d8bbwe
Microsoft.WebpImageExtension_1.0.62681.0_neutral_~_8wekyb3d8bbwe
Microsoft.Windows.Photos_24.24010.29003.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsAlarms_2022.2312.2.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsCalculator_2021.2311.0.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsCamera_2022.2312.3.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsNotepad_11.2312.18.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsSoundRecorder_2021.2312.5.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsStore_22401.1400.6.0_neutral_~_8wekyb3d8bbwe
Microsoft.WindowsTerminal_3001.18.10301.0_neutral_~_8wekyb3d8bbwe
Microsoft.XboxGamingOverlay_2.624.1111.0_neutral_~_8wekyb3d8bbwe
Microsoft.XboxIdentityProvider_12.110.15002.0_neutral_~_8wekyb3d8bbwe
Microsoft.XboxSpeechToTextOverlay_1.97.17002.0_neutral_~_8wekyb3d8bbwe
Microsoft.ZuneMusic_11.2312.8.0_neutral_~_8wekyb3d8bbwe
MicrosoftWindows.Client.WebExperience_424.1301.270.9_neutral_~_cw5n1h2txyewy
MicrosoftWindows.CrossDevice_1.23101.22.0_neutral_~_cw5n1h2txyewy
Ajoutons quelques packages qui seront automatiquement installés. Il est possible de capturer les fichiers d'Appx téléchargés par le magasin d'applications Windows mais ce site permet de télécharger les fichiers par numéro de produit. Commençons tout d'abord par "Microsoft PC Manager", une alternative officielle de Microsoft à CCleaner.
# Installation des dépendances
PS F:\Lab-DISM> Add-AppxProvisionedPackage -Path "E:\Scratch" -PackagePath "F:\Lab-DISM\MSIXBundles\MicrosoftPCManager\Microsoft.WindowsAppRuntime.1.5_5001.373.1736.0_x64__8wekyb3d8bbwe.Msix" -SkipLicense
Path : E:\Scratch
Online : False
RestartNeeded : False
# Installation de l'app
S F:\Lab-DISM> Add-AppxProvisionedPackage -Path "E:\Scratch" -PackagePath "F:\Lab-DISM\MSIXBundles\MicrosoftPCManager\Microsoft.MicrosoftPCManager_3.15.5.0_neutral_~_8wekyb3d8bbwe.Msixbundle" -SkipLicense
Path : E:\Scratch
Online : False
RestartNeeded : False
Ajoutons Microsoft Whiteboard par la même occasion.
# Installation des dépendances
PS F:\Lab-DISM> Add-AppxProvisionedPackage -Path "E:\Scratch" -PackagePath "F:\Lab-DISM\MSIXBundles\Whiteboard\Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x64__8wekyb3d8bbwe.Appx" -SkipLicense
Path : E:\Scratch
Online : False
RestartNeeded : False
PS F:\Lab-DISM> Add-AppxProvisionedPackage -Path "E:\Scratch" -PackagePath "F:\Lab-DISM\MSIXBundles\Whiteboard\Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe.Appx" -SkipLicense
Path : E:\Scratch
Online : False
RestartNeeded : False
PS F:\Lab-DISM> Add-AppxProvisionedPackage -Path "E:\Scratch" -PackagePath "F:\Lab-DISM\MSIXBundles\Whiteboard\Microsoft.VCLibs.140.00_14.0.33519.0_x64__8wekyb3d8bbwe.Appx" -SkipLicense
Path : E:\Scratch
Online : False
RestartNeeded : False
# Installation de l'appli
PS F:\Lab-DISM> Add-AppxProvisionedPackage -Path "E:\Scratch" -PackagePath "F:\Lab-DISM\MSIXBundles\Whiteboard\Microsoft.Whiteboard_54.20907.567.0_neutral_~_8wekyb3d8bbwe.AppxBundle" -SkipLicense
Path : E:\Scratch
Online : False
RestartNeeded : False
PS F:\Lab-DISM> Get-AppxProvisionedPackage -Path "E:\Scratch" | Where-Object PackageName -like "*Whiteboard*" | Select-Object -Property PackageName
PackageName
-----------
Microsoft.Whiteboard_54.20907.567.0_neutral_~_8wekyb3d8bbwe
Nous pourrions aussi installer les extensions pour les types de fichiers multimédias de Microsoft.
PS F:\Lab-DISM> Add-AppxProvisionedPackage -Path "E:\Scratch" -PackagePath "F:\Lab-DISM\MSIXBundles\MediaExtensions\Microsoft.AV1VideoExtension_1.3.4.0_neutral_~_8wekyb3d8bbwe.AppxBundle" -SkipLicense
Path : E:\Scratch
Online : False
RestartNeeded : False
PS F:\Lab-DISM> Add-AppxProvisionedPackage -Path "E:\Scratch" -PackagePath "F:\Lab-DISM\MSIXBundles\MediaExtensions\Microsoft.MPEG2VideoExtension_1.0.61931.0_neutral_~_8wekyb3d8bbwe.AppxBundle" -SkipLicense
Path : E:\Scratch
Online : False
RestartNeeded : False
PS F:\Lab-DISM> Get-AppxProvisionedPackage -Path "E:\Scratch" | Where-Object PackageName -like "*Extension*" | Select-Object -Property PackageName
PackageName
-----------
Microsoft.AV1VideoExtension_1.3.4.0_neutral_~_8wekyb3d8bbwe
Microsoft.AVCEncoderVideoExtension_1.0.271.0_neutral_~_8wekyb3d8bbwe
Microsoft.HEIFImageExtension_1.0.63001.0_neutral_~_8wekyb3d8bbwe
Microsoft.HEVCVideoExtension_2.0.61931.0_neutral_~_8wekyb3d8bbwe
Microsoft.MPEG2VideoExtension_1.0.61931.0_neutral_~_8wekyb3d8bbwe
Microsoft.RawImageExtension_2.3.171.0_neutral_~_8wekyb3d8bbwe
Microsoft.VP9VideoExtensions_1.1.451.0_neutral_~_8wekyb3d8bbwe
Microsoft.WebMediaExtensions_1.0.62931.0_neutral_~_8wekyb3d8bbwe
Microsoft.WebpImageExtension_1.0.62681.0_neutral_~_8wekyb3d8bbwe
Ajoutons aussi un fichier de disposition du menu démarrer pour éviter les suggestions d'apps à installer de Windows.
PS F:\Lab-DISM> Copy-Item -Path "F:\Lab-DISM\LayoutModification.json" -Destination "E:\Scratch\Users\Default\appdata\local\Microsoft\Windows\Shell" -Recurse -Force
Commettres des modifications à un WIM
Aucun fichier ne doit être en cours de modification. Déchargeons nos ruches de registre.
PS F:\Lab-DISM> reg unload HKEY_USERS\WIMDefault
The operation completed successfully.
PS F:\Lab-DISM> reg unload HKEY_USERS\WIM-SOFTWARE
The operation completed successfully.
PS F:\Lab-DISM> reg unload HKEY_USERS\WIM-SYSTEM
The operation completed successfully.
Il est possible d'appliquer les modifications à une image sans la démonter avec la commande /Commit
PS F:\Lab-DISM> DISM /Commit-Image /MountDir:E:\Scratch
Deployment Image Servicing and Management tool
Version: 10.0.22621.2792
Saving image
[==========================100.0%==========================]
The operation completed successfully.
Lorsque l'ensemble des modifications sont terminées, il est bonne pratique de démonter l'image pour la compresser et retirer les traces laissées sur le système ayant modifié le WIM. On peut démonter l'image en commetant ou en omettant les changement avec la commande "Unmount-Wim"
# Il est possible ici de /Commit ou /Discard
PS F:\Lab-DISM> DISM /Unmount-Wim /Mountdir:E:\Scratch /Commit
Deployment Image Servicing and Management tool
Version: 10.0.22621.2792
Image File : F:\Lab-DISM\install.wim
Image Index : 1
Saving image
[==========================100.0%==========================]
Unmounting image
[==========================100.0%==========================]
The operation completed successfully.
Créer un média d'installation avec la nouvelle image
La façon la plus simple de créer un média d'installation avec notre nouvelle image serait de remplacer le fichier .ESD ou .WIM d'un média d'installation existant à l'aide de votre méthode favorite. Dans mon cas, puisqu'il s'agit d'une clé USB, il suffit de copier-coller pour remplacer le fichier en question. S'il s'agissait d'un déploiment réseau, il suffirait de pointer le WinPE vers la bonne image à son exécution.
Il est important de noter que si le .wim est plus lourd que 8 gigaoctets, le média d'installation devra être une clé USB formatée en exFAT ou en NTFS.
PS F:\Lab-DISM> Remove-Item -Path I:\sources\install.esd
PS F:\Lab-DISM> Copy-Item -Path .\install.wim -Destination I:\sources
Résultat d'installation
La nouvelle image pourra être installée normalement et les modifications apportées devraient être appliquées au système.


