Aquest article detalla el procés per comprovar quins dispositius amb Windows 10 són aptes per a una actualització a Windows 11 i iniciar automàticament aquesta actualització mitjançant polítiques de FleetDM i scripts de PowerShell .
El procediment inclou:
- Detecció i emmagatzematge dels components del sistema necessaris (TPM 2.0 i Secure Boot) al registre
- Validació dels requisits de maquinari i programari per determinar l'elegibilitat de l'actualització
- Executar una descàrrega automàtica i una instal·lació silenciosa de Windows 11 en dispositius compatibles
Classificar dispositius amb TPM i Secure Boot presents
Crear la política de detecció (registre FleetDM)
Feu servir la consulta següent per verificar la presència de claus de registre que emmagatzemaran l'estat del TPM i de l'arrencada segura :
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' );Executa l'script associat (omple el registre)
Adjunta aquest script de PowerShell a la política anterior. Detecta la versió de TPM i l'estat de l'arrencada segura i, a continuació, els escriu al registre de Windows per a FleetDM.
$TPM = Get-WmiObject -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm$SecureBoot = Confirm-SecureBootUEFI$TPMVersion = $TPM.SpecVersion$SecureBootEnabled = if ($SecureBoot) { 1 } else { 0 }# Write values to the registry (example)New-Item -Path "HKLM:\Software\FleetDM" -Force | Out-NullSet-ItemProperty -Path "HKLM:\Software\FleetDM" -Name "TPMVersion" -Value $TPMVersionSet-ItemProperty -Path "HKLM:\Software\FleetDM" -Name "SecureBoot" -Value $SecureBootEnabledResultat esperat: S'han creat/actualitzat HKLM\Software\FleetDM\TPMVersion i HKLM\Software\FleetDM\SecureBoot.
Avaluar l'elegibilitat d'un dispositiu amb Windows 10 per a Windows 11
Crea la política següent per validar els requisits mínims (RAM, nuclis de CPU, arquitectura, TPM 2.0, arrencada segura) i excloure els dispositius no compatibles.
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' );Interpretació: la consulta retorna 1 si el dispositiu no és compatible amb Windows 10. Feu-ho servir com a política de no conformitat per mantenir només els dispositius elegibles (aquells per als quals la consulta no retorna 1).
Activa l'actualització al Windows 11 (dispositius elegibles)
Adjunta l'script de desplegament següent als dispositius compatibles. Descarrega l'ISO de Windows 11, munta la imatge, copia els codis font localment i programa una configuració silenciosa a SYSTEM .
# ImportsImport-Module BitsTransfer# Variables$uri = "https://production-bucket-public-files.s3.eu-west-3.amazonaws.com/Win11_24H2_French_x64.iso"$destination = "C:\Win11.iso"$log = "C:\logs\download_win11_iso.log"# Create the logs folder if it doesn't existif (-not (Test-Path -Path "C:\logs")) { New-Item -Path "C:\logs" -ItemType Directory | Out-Null}# Start the downloadtry { "`n[$(Get-Date)] Starting download..." | Out-File -Append $log if (-not (Test-Path $destination)){ Start-BitsTransfer -Source $uri -Destination $destination } "`n[$(Get-Date)] Download completed successfully." | Out-File -Append $log} catch { "`n[$(Get-Date)] Error during download: $_" | Out-File -Append $log}# Additional variables$isoPath = "C:\Win11.iso"$setupFolder = "C:\Temp\Win11Files"$taskName = "Win11SilentUpgrade"# Step 1 - Mount the ISOMount-DiskImage -ImagePath $isoPath -PassThru | Out-NullStart-Sleep -Seconds 2$vol = Get-Volume -DiskImage (Get-DiskImage -ImagePath $isoPath)$driveLetter = $vol.DriveLetter# Step 2 - Copy ISO content locallyNew-Item -ItemType Directory -Force -Path $setupFolder | Out-NullCopy-Item "$driveLetter`:\*" -Destination $setupFolder -Recurse# Unmount the ISODismount-DiskImage -ImagePath $isoPath# Step 3 - Create and schedule the installation task$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# Step 4 - Start the task immediatelyStart-ScheduledTask -TaskName $taskName