Questa guida trova i dispositivi Windows 10 che possono passare a Windows 11 e poi avvia automaticamente l'aggiornamento su di essi. Si basa su politiche di Fleet e script PowerShell.
Funzionalità
Panoramica
Il processo ha tre fasi:
- Leggere lo stato di TPM 2.0 e Secure Boot di ciascun dispositivo e salvarlo nel registro di Windows.
- Controllare i requisiti hardware e software per decidere quali dispositivi sono idonei.
- Scaricare Windows 11 e installarlo silenziosamente sui dispositivi che sono idonei.
Come utilizzare
Passo 1. Registrare TPM e Secure Boot nel registro
- Creare una politica con la query sottostante. Controlla se le due chiavi di registro che contengono lo stato di TPM e Secure Boot esistono già.
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'
);- Allega lo script PowerShell sottostante a quella politica. Legge la versione TPM e lo stato di Secure Boot e scrive entrambi i valori nel registro.
$TPM = Get-WmiObject -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm
$SecureBoot = Confirm-SecureBootUEFI
$TPMVersion = $TPM.SpecVersion
$SecureBootEnabled = if ($SecureBoot) { 1 } else { 0 }
# Scrivere valori nel registro (esempio)
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 $SecureBootEnabledQuando lo script è stato eseguito, HKLM\Software\FleetDM\TPMVersion e HKLM\Software\FleetDM\SecureBoot esistono e contengono i valori attuali.
Passo 2. Controllare quali dispositivi Windows 10 sono idonei
- Creare una seconda politica con la query sottostante. Controlla RAM, core CPU, architettura, TPM 2.0 e 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'
);- Leggi il risultato nel modo corretto: la query restituisce 1 quando il dispositivo non è una macchina Windows 10 idonea. Trattalo come una politica di non conformità. I dispositivi per i quali non restituisce 1 sono quelli che puoi aggiornare.
Passo 3. Avviare l'aggiornamento sui dispositivi idonei
- Allega lo script sottostante ai dispositivi che hanno superato il passo 2.
- Lo script scarica l'ISO di Windows 11, la monta, copia i file di installazione nel disco locale e pianifica un'installazione silenziosa che viene eseguita come SYSTEM.
# Importa
Import-Module BitsTransfer
# Variabili
$uri = "https://production-bucket-public-files.s3.eu-west-3.amazonaws.com/Win11_24H2_French_x64.iso" # Locale francese — sostituisci con l'ISO appropriato per la tua regione
$destination = "C:\Win11.iso"
$log = "C:\logs\download_win11_iso.log"
# Crea la cartella logs se non esiste
if (-not (Test-Path -Path "C:\logs")) {
New-Item -Path "C:\logs" -ItemType Directory | Out-Null
}
# Avvia il download
try {
"`n[$(Get-Date)] Avvio download..." | Out-File -Append $log
if (-not (Test-Path $destination)){
Start-BitsTransfer -Source $uri -Destination $destination
}
"`n[$(Get-Date)] Download completato consuccesso." | Out-File -Append $log
} catch {
"`n[$(Get-Date)] Errore durante il download: $_" | Out-File -Append $log
}
# Variabili aggiuntive
$isoPath = "C:\Win11.iso"
$setupFolder = "C:\Temp\Win11Files"
$taskName = "Win11SilentUpgrade"
# Passo 1 - Montare l'ISO
Mount-DiskImage -ImagePath $isoPath -PassThru | Out-Null
Start-Sleep -Seconds 2
$vol = Get-Volume -DiskImage (Get-DiskImage -ImagePath $isoPath)
$driveLetter = $vol.DriveLetter
# Passo 2 - Copiare il contenuto dell'ISO localmente
New-Item -ItemType Directory -Force -Path $setupFolder | Out-Null
Copy-Item "$driveLetter`:\*" -Destination $setupFolder -Recurse
# Smontare l'ISO
Dismount-DiskImage -ImagePath $isoPath
# Passo 3 - Creare e pianificare il compito di installazione 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
# Passo 4 - Avviare il compito immediatamente
Start-ScheduledTask -TaskName $taskNameConsigli e Migliori Pratiche
- Cambia l'ISO prima di eseguire qualsiasi cosa. Lo script punta a un ISO francese. Sostituisci l'URL con l'ISO per la tua lingua e regione.
- Esegui prima il passo 1 e dagli tempo. Il passo 2 dipende dai valori di registro scritti nel passo 1. Un dispositivo senza di essi mostra sempre come non idoneo.
- Inizia con un piccolo gruppo. L'installazione avviene silenziosamente e senza un messaggio di riavvio. Provalo su alcuni dispositivi prima di tutta la flotta.
-
Conserva i log. Il log di download va a
C:\logs\download_win11_iso.loge il log di installazione aC:\logs\WinSetup.log. Controllali prima quando qualcosa fallisce. - Pianifica per il download. Ogni dispositivo scarica un ISO completo di Windows 11, quindi evita connessioni lente o a pagamento.
Risoluzione dei problemi e FAQ
Risoluzione dei problemi
- Un dispositivo che ti aspettavi idoneo risulta non idoneo. Controlla che lo script del passo 1 sia stato eseguito su di esso e che entrambe le chiavi di registro esistano. Controlla poi i requisiti nella query del passo 2: Windows 10, almeno 4 GB di RAM, almeno 2 core CPU fisici, un processore x86_64, versione TPM 2 e Secure Boot attivato.
-
L'aggiornamento non è partito. Apri
C:\logs\download_win11_iso.logper vedere se l'ISO è stato scaricato. Se lo è stato, cerca il compito pianificatoWin11SilentUpgradesul dispositivo. -
L'installazione è fallita a metà. Leggi
C:\logs\WinSetup.log, dove lo script dice a Windows di copiare i suoi log.
FAQ
-
La query del passo 2 restituisce i dispositivi idonei?
No, il contrario. Restituisce 1 per i dispositivi che non sono idonei. I dispositivi idonei sono quelli per i quali non restituisce 1.
-
Perché salvare TPM e Secure Boot nel registro?
Affinché la politica di idoneità possa leggerli con una semplice query di registro.
-
Quale account esegue l'aggiornamento?
SYSTEM, tramite un compito pianificato che lo script crea e avvia immediatamente.
-
Lo script riavvia il dispositivo?
Il comando di installazione include/noreboot, quindi lo script non forza un riavvio da solo.