Ce guide trouve les appareils Windows 10 qui peuvent passer à Windows 11 et commence ensuite la mise à niveau automatiquement. Il repose sur des politiques de flotte et des scripts PowerShell.
Fonctionnalité
Aperçu
Le processus comporte trois étapes :
- Lire l'état de TPM 2.0 et de Secure Boot de chaque appareil et l'enregistrer dans le registre Windows.
- Vérifier les exigences matérielles et logicielles pour décider quels appareils sont éligibles.
- Télécharger Windows 11 et l'installer silencieusement sur les appareils éligibles.
Comment utiliser
Étape 1. Enregistrer TPM et Secure Boot dans le registre
- Créer une politique avec la requête ci-dessous. Elle vérifie si les deux clés de registre qui contiennent l'état de TPM et de Secure Boot existent déjà.
SELECT 1 WHERE EXISTS (
SELECT 1 FROM registry
WHERE path = 'HKEY_LOCAL_MACHINE\Software\FleetDM\TPMVersion'
)
AND EXISTS (
SELECT 1 FROM registry
WHERE path = 'HKEY_LOCAL_MACHINE\Software\FleetDM\SecureBoot'
);- Attacher le script PowerShell ci-dessous à cette politique. Il lit la version de TPM et l'état de Secure Boot et écrit les deux valeurs dans le registre.
$TPM = Get-WmiObject -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm
$SecureBoot = Confirm-SecureBootUEFI
$TPMVersion = $TPM.SpecVersion
$SecureBootEnabled = if ($SecureBoot) { 1 } else { 0 }
# Écrire les valeurs dans le registre (exemple)
New-Item -Path "HKLM:\Software\FleetDM" -Force | Out-Null
Set-ItemProperty -Path "HKLM:\Software\FleetDM" -Name "TPMVersion" -Value $TPMVersion
Set-ItemProperty -Path "HKLM:\Software\FleetDM" -Name "SecureBoot" -Value $SecureBootEnabledLorsque le script a été exécuté, HKLM\Software\FleetDM\TPMVersion et HKLM\Software\FleetDM\SecureBoot existent et contiennent les valeurs actuelles.
Étape 2. Vérifier quels appareils Windows 10 sont éligibles
- Créer une deuxième politique avec la requête ci-dessous. Elle vérifie la RAM, les cœurs de CPU, l'architecture, TPM 2.0 et Secure Boot.
SELECT 1 FROM os_version as os JOIN system_info as si WHERE
os.name NOT LIKE 'Microsoft Windows 10%'
OR si.physical_memory < 4 * 1024 * 1024 * 1024
OR si.cpu_physical_cores < 2
OR si.cpu_type NOT LIKE '%x86_64%'
OR NOT EXISTS (
SELECT * FROM registry
WHERE path = 'HKEY_LOCAL_MACHINE\Software\FleetDM\TPMVersion'
AND data LIKE '2%'
)
OR NOT EXISTS (
SELECT * FROM registry
WHERE path = 'HKEY_LOCAL_MACHINE\Software\FleetDM\SecureBoot'
AND data = '1'
);- Lire le résultat dans le bon sens : la requête renvoie 1 lorsque l'appareil n'est pas une machine Windows 10 éligible. Traitez-le comme une politique de non-conformité. Les appareils où elle ne renvoie pas 1 sont ceux que vous pouvez mettre à niveau.
Étape 3. Commencer la mise à niveau sur les appareils éligibles
- Attacher le script ci-dessous aux appareils qui ont passé l'étape 2.
- Le script télécharge l'ISO de Windows 11, le monte, copie les fichiers d'installation sur le disque local et planifie une installation silencieuse qui s'exécute en tant que SYSTEM.
# Imports
Import-Module BitsTransfer
# Variables
$uri = "https://production-bucket-public-files.s3.eu-west-3.amazonaws.com/Win11_24H2_French_x64.iso" # locale française — remplacer par l'ISO appropriée pour votre région
$destination = "C:\Win11.iso"
$log = "C:\logs\download_win11_iso.log"
# Créer le dossier logs si il n'existe pas
if (-not (Test-Path -Path "C:\logs")) {
New-Item -Path "C:\logs" -ItemType Directory | Out-Null
}
# Démarrer le téléchargement
try {
"`n[$(Get-Date)] Démarrage du téléchargement..." | Out-File -Append $log
if (-not (Test-Path $destination)){
Start-BitsTransfer -Source $uri -Destination $destination
}
"`n[$(Get-Date)] Téléchargement terminé avec succès." | Out-File -Append $log
} catch {
"`n[$(Get-Date)] Erreur durant le téléchargement: $_" | Out-File -Append $log
}
# Variables supplémentaires
$isoPath = "C:\Win11.iso"
$setupFolder = "C:\Temp\Win11Files"
$taskName = "Win11SilentUpgrade"
# Étape 1 - Monter l'ISO
Mount-DiskImage -ImagePath $isoPath -PassThru | Out-Null
Start-Sleep -Seconds 2
$vol = Get-Volume -DiskImage (Get-DiskImage -ImagePath $isoPath)
$driveLetter = $vol.DriveLetter
# Étape 2 - Copier le contenu de l'ISO localement
New-Item -ItemType Directory -Force -Path $setupFolder | Out-Null
Copy-Item "$driveLetter`:\*" -Destination $setupFolder -Recurse
# Démonter l'ISO
Dismount-DiskImage -ImagePath $isoPath
# Étape 3 - Créer et planifier la tâche d'installation
$action = New-ScheduledTaskAction -Execute "C:\Temp\Win11Files\setup.exe" -Argument "/auto upgrade /migratedrivers none /resizerecoverypartition enable /dynamicupdate disable /eula accept /quiet /noreboot /uninstall disable /compat ignorewarning /copylogs C:\logs\WinSetup.log"
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
$task = New-ScheduledTask -Action $action -Principal $principal -Trigger (New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(1))
Register-ScheduledTask -TaskName $taskName -InputObject $task -Force
# Étape 4 - Démarrer la tâche immédiatement
Start-ScheduledTask -TaskName $taskNameConseils et meilleures pratiques
- Changez l'ISO avant de lancer quoi que ce soit. Le script pointe vers une ISO française. Remplacez l'URL par l'ISO pour votre langue et région.
- Exécutez d'abord l'étape 1 et laissez-lui du temps. L'étape 2 dépend des valeurs du registre écrites à l'étape 1. Un appareil sans elles apparaît toujours comme non éligible.
- Commencez par un petit groupe. La configuration s'exécute silencieusement et sans invite de redémarrage. Essayez sur quelques appareils avant de le faire sur toute la flotte.
-
Conservez les journaux. Le journal de téléchargement va dans
C:\logs\download_win11_iso.loget le journal de configuration dansC:\logs\WinSetup.log. Consultez-les d'abord lorsque quelque chose échoue. - Planifiez le téléchargement. Chaque appareil récupère une ISO complète de Windows 11, donc évitez les connexions lentes ou à usage payant.
Dépannage et FAQ
Dépannage
- Un appareil que vous pensiez éligible apparaît comme non éligible. Vérifiez que le script de l'étape 1 a été exécuté sur celui-ci et que les deux clés de registre existent. Ensuite, vérifiez les exigences dans la requête de l'étape 2 : Windows 10, au moins 4 Go de RAM, au moins 2 cœurs de CPU physiques, un processeur x86_64, la version TPM 2 et Secure Boot activé.
-
La mise à niveau n'a pas démarré. Ouvrez
C:\logs\download_win11_iso.logpour voir si l'ISO a été téléchargée. Si c'est le cas, recherchez la tâche planifiéeWin11SilentUpgradesur l'appareil. -
La configuration a échoué en cours de route. Lisez
C:\logs\WinSetup.log, où le script indique à la configuration de Windows de copier ses journaux.
FAQ
-
La requête de l'étape 2 renvoie-t-elle les appareils éligibles ?
Non, c'est le contraire. Elle renvoie 1 pour les appareils qui ne sont pas éligibles. Les appareils éligibles sont ceux pour lesquels elle ne renvoie pas 1.
-
Pourquoi enregistrer TPM et Secure Boot dans le registre ?
Pour que la politique d'éligibilité puisse les lire avec une requête de registre simple.
-
Quel compte exécute la mise à niveau ?
SYSTEM, via une tâche planifiée que le script crée et démarre immédiatement.
-
Le script redémarre-t-il l'appareil ?
La commande de configuration inclut/noreboot, donc le script ne force pas un redémarrage lui-même.