Esta guía encuentra los dispositivos de Windows 10 que pueden actualizarse a Windows 11 y luego inicia la actualización en ellos automáticamente. Se basa en políticas de Fleet y scripts de PowerShell.
Función/Funcionalidad
Descripción general
El proceso tiene tres etapas:
- Leer el estado de TPM 2.0 y Secure Boot de cada dispositivo y guardarlo en el registro de Windows.
- Verificar los requisitos de hardware y software para decidir qué dispositivos califican.
- Descargar Windows 11 e instalarlo silenciosamente en los dispositivos que califican.
Cómo usar
Paso 1. Registrar TPM y Secure Boot en el registro
- Crear una política con la consulta a continuación. Verifica si ya existen las dos claves de registro que contienen el estado de TPM y Secure Boot.
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'
);- Adjuntar el script de PowerShell a continuación a esa política. Lee la versión de TPM y el estado de Secure Boot y escribe ambos valores en el registro.
$TPM = Get-WmiObject -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm
$SecureBoot = Confirm-SecureBootUEFI
$TPMVersion = $TPM.SpecVersion
$SecureBootEnabled = if ($SecureBoot) { 1 } else { 0 }
# Escribir valores en el registro (ejemplo)
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 $SecureBootEnabledCuando se haya ejecutado el script, HKLM\Software\FleetDM\TPMVersion y HKLM\Software\FleetDM\SecureBoot existirán y contendrán los valores actuales.
Paso 2. Verificar qué dispositivos de Windows 10 califican
- Crear una segunda política con la consulta a continuación. Verifica RAM, núcleos de CPU, arquitectura, TPM 2.0 y 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'
);- Leer el resultado de manera correcta: la consulta devuelve 1 cuando el dispositivo no es una máquina de Windows 10 elegible. Trátalo como una política de no conformidad. Los dispositivos donde no devuelve 1 son los que puedes actualizar.
Paso 3. Iniciar la actualización en dispositivos elegibles
- Adjuntar el script a continuación a los dispositivos que pasaron el paso 2.
- El script descarga el ISO de Windows 11, lo monta, copia los archivos de instalación en el disco local y programa una instalación silenciosa que se ejecuta como SYSTEM.
# Imports
Import-Module BitsTransfer
# Variables
$uri = "https://production-bucket-public-files.s3.eu-west-3.amazonaws.com/Win11_24H2_French_x64.iso" # localidad francesa — reemplazar con el ISO apropiado para tu región
$destination = "C:\Win11.iso"
$log = "C:\logs\download_win11_iso.log"
# Crear la carpeta logs si no existe
if (-not (Test-Path -Path "C:\logs")) {
New-Item -Path "C:\logs" -ItemType Directory | Out-Null
}
# Iniciar la descarga
try {
"`n[$(Get-Date)] Iniciando descarga..." | Out-File -Append $log
if (-not (Test-Path $destination)){
Start-BitsTransfer -Source $uri -Destination $destination
}
"`n[$(Get-Date)] Descarga completada conéxito." | Out-File -Append $log
} catch {
"`n[$(Get-Date)] Error durante la descarga: $_" | Out-File -Append $log
}
# Variables adicionales
$isoPath = "C:\Win11.iso"
$setupFolder = "C:\Temp\Win11Files"
$taskName = "Win11SilentUpgrade"
# Paso 1 - Montar el ISO
Mount-DiskImage -ImagePath $isoPath -PassThru | Out-Null
Start-Sleep -Seconds 2
$vol = Get-Volume -DiskImage (Get-DiskImage -ImagePath $isoPath)
$driveLetter = $vol.DriveLetter
# Paso 2 - Copiar el contenido del ISO localmente
New-Item -ItemType Directory -Force -Path $setupFolder | Out-Null
Copy-Item "$driveLetter`:\*" -Destination $setupFolder -Recurse
# Desmontar el ISO
Dismount-DiskImage -ImagePath $isoPath
# Paso 3 - Crear y programar la tarea de instalación 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
# Paso 4 - Iniciar la tarea inmediatamente
Start-ScheduledTask -TaskName $taskNameConsejos y Mejores Prácticas
- Cambia el ISO antes de ejecutar cualquier cosa. El script apunta a un ISO francés. Reemplaza la URL con el ISO correspondiente a tu idioma y región.
- Ejecuta el paso 1 primero y dale tiempo. El paso 2 depende de los valores del registro escritos en el paso 1. Un dispositivo sin ellos siempre se muestra como no elegible.
- Comienza con un grupo pequeño. La instalación se ejecuta silenciosamente y sin un aviso de reinicio. Prueba en algunos dispositivos antes de hacerlo en toda la flota.
-
Mantén los registros. El registro de descarga se guarda en
C:\logs\download_win11_iso.logy el registro de instalación enC:\logs\WinSetup.log. Revísalos primero cuando algo falla. - Planifica la descarga. Cada dispositivo descarga un ISO completo de Windows 11, así que evita conexiones lentas o de pago por uso.
Resolución de Problemas y FAQ
Resolución de Problemas
- Un dispositivo que esperabas que calificara aparece como no elegible. Verifica que el script del paso 1 se haya ejecutado en él y que ambas claves de registro existan. Luego verifica los requisitos en la consulta del paso 2: Windows 10, al menos 4 GB de RAM, al menos 2 núcleos de CPU físicos, un procesador x86_64, versión de TPM 2 y Secure Boot activado.
-
La actualización no comenzó. Abre
C:\logs\download_win11_iso.logpara ver si se descargó el ISO. Si lo hizo, busca la tarea programadaWin11SilentUpgradeen el dispositivo. -
La instalación falló a medio camino. Lee
C:\logs\WinSetup.log, donde el script indica a la instalación de Windows que copie sus registros.
FAQ
-
¿Devuelve la consulta del paso 2 los dispositivos elegibles?
No, lo contrario. Devuelve 1 para los dispositivos que no califican. Los dispositivos elegibles son aquellos donde no devuelve 1.
-
¿Por qué guardar TPM y Secure Boot en el registro?
Para que la política de elegibilidad pueda leerlos con una consulta de registro simple.
-
¿Qué cuenta ejecuta la actualización?
SYSTEM, a través de una tarea programada que el script crea y comienza de inmediato.
-
¿Reinicia el dispositivo el script?
El comando de instalación incluye/noreboot, por lo que el script no fuerza un reinicio por sí mismo.