Sysprep et Finalisation
Master Windows 11 25H2 Optimisé
Mises à jour Windows
Installez toutes les mises à jour Windows disponibles avant de finaliser le master :
# Installer le module PSWindowsUpdate si nécessaire
Install-Module PSWindowsUpdate -Force -SkipPublisherCheck
# Installer toutes les mises à jour disponibles
Import-Module PSWindowsUpdate
Get-WindowsUpdate -Install -AcceptAll -IgnoreReboot
# Vérifier l'état des mises à jour
Get-WindowsUpdate
# Installer uniquement les mises à jour de sécurité
Get-WindowsUpdate -Install -MicrosoftUpdate -Category "Security Updates" -AcceptAll
# Nettoyer les fichiers de mise à jour après installation
DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase
Assurez-vous que Windows Update est bien configuré pour les futures installations :
# Configurer Windows Update pour installation automatique
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Force
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Value 0 -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Value 4 -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "ScheduledInstallDay" -Value 0 -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "ScheduledInstallTime" -Value 3 -Force
# Activer les mises à jour des autres produits Microsoft
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AllowMUUpdateService" -Value 1 -Force
Optimisations finales avant Sysprep
Script de finalisation complet
Voici un script PowerShell complet qui regroupe toutes les opérations de finalisation avec logging :
# Script de finalisation du Master Windows 11 25H2
# Activer la journalisation complète
Start-Transcript -Path "C:\MasterBuild_$(Get-Date -Format 'yyyyMMdd_HHmmss').log" -Append
Write-Host "=== Début de la finalisation du master ===" -ForegroundColor Green
Write-Host "Date: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" -ForegroundColor Cyan
# Vérification finale de l'intégrité système
Write-Host "`nVérification de l'intégrité système..." -ForegroundColor Yellow
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow
# Nettoyage final des fichiers temporaires
Write-Host "`nNettoyage des fichiers temporaires..." -ForegroundColor Yellow
Remove-Item -Path "$env:windir\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue
Clear-RecycleBin -Force -ErrorAction SilentlyContinue
# Nettoyage du dossier Prefetch pour optimiser le démarrage
Write-Host "`nNettoyage du dossier Prefetch..." -ForegroundColor Yellow
Remove-Item -Path "$env:windir\Prefetch\*" -Force -ErrorAction SilentlyContinue
# Nettoyage des logs
Write-Host "`nNettoyage des journaux d'événements..." -ForegroundColor Yellow
wevtutil el | ForEach-Object {wevtutil cl "$_"}
# Désactiver l'hibernation pour libérer de l'espace
Write-Host "`nDésactivation de l'hibernation..." -ForegroundColor Yellow
powercfg /hibernate off
# Vider le cache DNS
Write-Host "`nNettoyage du cache DNS..." -ForegroundColor Yellow
Clear-DnsClientCache
# Supprimer les points de restauration système
Write-Host "`nSuppression des points de restauration..." -ForegroundColor Yellow
vssadmin delete shadows /all /quiet
# Afficher les statistiques finales
Write-Host "`n=== Statistiques du système ===" -ForegroundColor Green
$volume = Get-Volume -DriveLetter C
Write-Host "Espace libre : $([math]::Round($volume.SizeRemaining/1GB, 2)) GB"
Write-Host "Espace utilisé : $([math]::Round(($volume.Size - $volume.SizeRemaining)/1GB, 2)) GB"
Write-Host "Taille totale : $([math]::Round($volume.Size/1GB, 2)) GB"
Write-Host "`n=== Finalisation terminée ===" -ForegroundColor Green
Write-Host "Le système est prêt pour Sysprep." -ForegroundColor Cyan
Stop-Transcript
Préparation finale du master
Sysprep et généralisation
Avant de capturer l'image, le système doit être généralisé avec Sysprep pour supprimer les informations spécifiques à l'ordinateur.
Sysprep (System Preparation Tool) est l'outil qui prépare l'installation Windows à être généralisée et déployée sur plusieurs machines. C'est l'étape la plus importante pour garantir que chaque déploiement reçoit un SID (Security Identifier) unique et redémarre en mode OOBE (Out-of-Box Experience).
Options Sysprep et leurs fonctions
| Option | Fonction | Description détaillée |
|---|---|---|
/oobe |
Mode OOBE | Configure Windows pour démarrer en mode Out-of-Box Experience au prochain démarrage (configuration régionale, création utilisateur, etc.) |
/generalize |
Généralisation | Supprime les informations uniques spécifiques à l'installation (SID, pilotes matériels spécifiques, activation). Crucial pour le déploiement multi-matériel |
/shutdown |
Arrêt | Éteint la machine après l'exécution de Sysprep, la laissant prête à être capturée |
/mode:vm |
Mode VM | Optimise Sysprep pour les machines virtuelles (réduit le temps de généralisation) |
/unattend |
Fichier de réponses | Utilise un fichier XML pour automatiser l'OOBE et personnaliser le déploiement |
# Nettoyer les profils utilisateurs temporaires
Get-ChildItem "C:\Users" -Exclude "Public","Default","Administrator" | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
# Supprimer les fichiers Panther (logs d'installation)
Remove-Item -Path "$env:windir\Panther\*" -Recurse -Force -ErrorAction SilentlyContinue
Exécution de Sysprep
Pour une machine physique :
C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown
Pour une machine virtuelle (recommandé pour VM) :
C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown /mode:vm
Une fois que Sysprep a été exécuté et que l'ordinateur s'est éteint, NE LE REDÉMARREZ PLUS. Le système est maintenant dans un état généralisé et prêt à être capturé. Tout redémarrage déclencherait le processus OOBE et compromettrait la généralisation.
L'image est maintenant prête à être capturée par votre outil de déploiement (MDT, WDS, DISM, etc.) pour devenir votre master optimisé.
Capture de l'image
Une fois le système éteint après Sysprep, démarrez sur un environnement Windows PE et capturez l'image avec DISM :
# Depuis Windows PE, capturer la partition système
DISM /Capture-Image /ImageFile:"D:\Windows11-25H2-Master.wim" /CaptureDir:"C:\" /Name:"Windows 11 25H2 Master" /Description:"Master Windows 11 25H2 optimisé et sécurisé - $(Get-Date -Format 'yyyy-MM-dd')" /Compress:max /Verify
# Alternative : Capture au format ESD (plus compressé)
DISM /Capture-Image /ImageFile:"D:\Windows11-25H2-Master.esd" /CaptureDir:"C:\" /Name:"Windows 11 25H2 Master" /Compress:recovery /Verify
Options de compression :
/Compress:max: Compression maximale (WIM le plus petit, capture lente)/Compress:fast: Compression rapide (WIM plus gros, capture rapide)/Compress:recovery: Format ESD, compression maximale (le plus petit fichier)
Vérifications post-déploiement
Après avoir déployé votre master sur un poste de production, effectuez les vérifications suivantes :
Vérification de la sécurité
# Vérifier l'état de Device Guard et Credential Guard
Get-ComputerInfo | Select-Object DeviceGuardSmartStatus, DeviceGuardSecurityServicesConfigured
# Vérifier l'état de Windows Defender
Get-MpComputerStatus | Select-Object AntivirusEnabled, RealTimeProtectionEnabled
# Vérifier le TPM
Get-Tpm | Select-Object TpmPresent, TpmReady, TpmEnabled, TpmActivated
# Vérifier Secure Boot
Confirm-SecureBootUEFI
Vérification des performances
# Vérifier l'utilisation mémoire
Get-Process | Sort-Object WS -Descending | Select-Object -First 10 ProcessName, @{Name="Memory (MB)";Expression={[math]::Round($_.WS/1MB,2)}}
# Vérifier les services en cours d'exécution
$runningServices = Get-Service | Where-Object {$_.Status -eq "Running"}
Write-Host "Nombre de services en cours d'exécution : $($runningServices.Count)"
# Vérifier l'utilisation du disque
Get-Volume | Select-Object DriveLetter, FileSystemLabel, @{Name="Size (GB)";Expression={[math]::Round($_.Size/1GB,2)}}, @{Name="Free (GB)";Expression={[math]::Round($_.SizeRemaining/1GB,2)}}
# Vérifier les performances de démarrage
Get-CimInstance Win32_OperatingSystem | Select-Object LastBootUpTime
Test de connectivité et fonctionnalités
# Vérifier la connectivité réseau
Test-Connection -ComputerName "8.8.8.8" -Count 4
Test-Connection -ComputerName "google.com" -Count 4
# Vérifier la résolution DNS
Resolve-DnsName google.com
Resolve-DnsName microsoft.com
# Vérifier l'activation Windows
slmgr /xpr
slmgr /dli
# Vérifier le pare-feu Windows
Get-NetFirewallProfile | Select-Object Name, Enabled
# Vérifier Windows Defender
Get-MpComputerStatus