Esta guía cubre la extracción del hardware hash de equipos Lenovo nuevos, paso necesario para enrolarlos en Microsoft Windows Autopilot. El hash es una huella digital única del equipo que Microsoft Intune usa para reconocerlo y aplicarle su configuración automáticamente cuando el usuario final lo encienda por primera vez.
El procedimiento es el mismo para cualquier equipo Lenovo sin importar qué traiga de fábrica (Windows 11 Pro OEM, FreeDOS, Ubuntu, o nada). Booteamos desde un USB con el instalador de Windows 11, abrimos un cmd, corremos el script y apagamos. Una sola receta para todo el lote.
extraer-hash.cmd — wrapper que detecta el USB y dispara la extracción.Get-WindowsAutopilotInfo.ps1 — script oficial de Microsoft que hace la lectura del hash.HASHES\autopilot.csv con todos los hashes en append (no sobreescribe). No hace falta un USB separado de datos.
.ps1 está precargado en el USB, pero conviene llevarlo como red de seguridad por si el USB se reformatea o el .ps1 falta — en ese caso el .cmd cae al fallback de PowerShell Gallery y necesita internet.Las Lenovo tienen un par de cosas distintas a otras marcas que vale la pena saber antes:
En la mayoría de Lenovo modernas, las teclas F1 a F12 por default ejecutan funciones especiales (volumen, brillo, etc.) en lugar de F1-F12 reales. Esto rompe el atajo Shift+F10.
Lenovo agrega un botón propio llamado Novo (símbolo: flecha curva pequeña ↶) que abre un menú especial sin importar qué F-key use el modelo. Es la forma más fácil de entrar al boot menu o al BIOS.
Está en el lateral izquierdo de la notebook (cerca de la bisagra) o al lado del botón de power. Es pequeño, hundido, hay que presionarlo con la punta de un clip o un lápiz. Algunas IdeaPad muy nuevas lo reemplazan por Fn+F2.
| Línea Lenovo | Boot menu | BIOS Setup |
|---|---|---|
| ThinkPad (T, X, L, E) | F12 al encender | F1 al encender |
| ThinkBook | F12 al encender | F2 al encender |
| IdeaPad | F12 o Fn+F12 | F2 o Fn+F2 |
| Cualquier Lenovo (si dudás) | Botón Novo (sección 3.2) — abre menú con ambas opciones | |
Autopilot necesita TPM 2.0 activado. Las Lenovo nuevas lo traen activado de fábrica, pero si un equipo falla la extracción de hash, verificalo:
Active o Enabled (TPM 2.0).Un solo USB de 8 GB o más cumple las dos funciones: bootea el instalador de Windows 11 (entorno WinPE con cmd) y lleva el script + el CSV de hashes. La preparación se hace una sola vez en una PC con Windows e internet, y después el mismo USB sirve para todo el lote.
Este paso genera el USB con el instalador. No se instala nada en ningún equipo — el instalador se usa solo como un "Windows portátil" en RAM (WinPE) para acceder a un cmd.
Una vez armado el USB booteable, agregar dos archivos en la raíz — al lado de setup.exe y la carpeta sources/ del instalador. Agregar archivos a la raíz no rompe el booteo: WinPE ignora lo que no necesita.
extraer-hash.cmd y copiarlo a la raíz del USB.
Get-WindowsAutopilotInfo.ps1 y copiarlo a la raíz del USB. Dos opciones:
Save-Script -Name Get-WindowsAutopilotInfo -Path "E:\"
Reemplazar E:\ por la letra del USB. Si Save-Script no está disponible, primero instalar el módulo: Install-Module PowerShellGet -Force. Si el .ps1 queda dentro de una subcarpeta (por ejemplo E:\Get-WindowsAutopilotInfo\), moverlo a la raíz.
E:\extraer-hash.cmd
E:\Get-WindowsAutopilotInfo.ps1
E:\setup.exe (del instalador)
E:\sources\ (del instalador)
... etc
HASHES\ en el USB y agrega ahí cada hash al autopilot.csv en modo append.
.ps1 va precargado en el USB
Para evitar que cada equipo tenga que bajar el script desde PowerShell Gallery durante la extracción. Si por algún motivo el .ps1 no está en el USB, extraer-hash.cmd intenta bajarlo desde PSGallery como fallback — pero eso requiere internet en campo y agrega un minuto por equipo.
Mismos pasos para todos los equipos del lote, sin importar qué sistema operativo traigan.
.ps1 precargado en el USB no se usa, pero queda listo por si hay que caer al fallback.wmic logicaldisk get name,volumename
En WinPE vas a ver dos:
X: — RAM disk temporal del instalador (archivos del setup montados en RAM). No es el USB.D: o E:) — el USB físico. Se reconoce por el volume name que le hayas puesto, y porque en su raíz están extraer-hash.cmd y Get-WindowsAutopilotInfo.ps1.Curiosidad: el .cmd por dentro vuelve a recorrer las letras D a N para autoubicarse cuando arranca. El wmic sirve solo para que vos sepas qué letra tipear en el paso siguiente.
D: — reemplazar con la letra real):
D:\extraer-hash.cmd
Get-WindowsAutopilotInfo.ps1 está en la raíz del USB (debería estar — ver sección 4.2). Si está, lo ejecuta local: sin descarga, sin red en este paso.wpeutil shutdown
En el entorno del instalador, el shutdown común no funciona; usá wpeutil shutdown.
Disabled temporalmente. Después de extraer todos los hashes, volvé a Enabled.
HASHES\autopilot.csv con Bloc de notas. No usar Excel: rompe el formato del hash (Excel lo trata como número, agrega comillas, le saca padding).Device Serial Number, Windows Product ID, Hardware Hash.autopilot.csv.
Este apartado no es el flujo recomendado. Existe para cubrir un caso puntual: el USB de WinPE no tiene PowerShell incluido y en el cmd del instalador aparece el error:
"powershell.exe" no se reconoce como un comando interno o externo
El WinPE base no trae PowerShell — hay que agregarlo con DISM en la armada del USB. Mientras tanto, si tenés el lote a procesar y no podés rearmar el USB en el momento, podés sacar el hash desde el Windows preinstalado de fábrica, durante la pantalla OOBE (la primera pantalla cuando encendés un equipo nuevo, "Comencemos por la región").
shutdown /s /t 0 apenas termina el script. Si por error avanzás en OOBE y creás un usuario local, el equipo queda "ensuciado" y hay que resetearlo desde recovery antes de entregarlo.Get-WindowsAutopilotInfo.ps1 que ya está en su raíz).Si no abre nada y probaste ambas combinaciones: el equipo es Win11 24H2+ con el bloqueo activo. Este flujo no aplica para ese equipo, hay que rearmar el USB WinPE con PowerShell.
wmic logicaldisk get name,volumename
A diferencia de WinPE, acá no hay X:. Las letras son normales (C: es el disco interno, otra letra — típicamente D: o E: — es el USB).
D: con la letra real del USB):
if not exist D:\HASHES mkdir D:\HASHES
cd /d D:\HASHES
powershell -ExecutionPolicy Bypass -File D:\Get-WindowsAutopilotInfo.ps1 -OutputFile D:\HASHES\autopilot.csv -Append
El parámetro -Append es clave: hace que el CSV vaya acumulando filas por cada equipo, igual que el flujo WinPE.
shutdown /s /t 0
No cerrar el cmd y volver a OOBE. No tocar la pantalla. Directo a apagado.
| Situación | Mejor opción |
|---|---|
| Lote chico (≤10 equipos), todos con Win11 preinstalado, hay que entregar hoy | OOBE como excepción, con cuidado del paso de apagado |
| Lote mediano/grande, o el lote incluye FreeDOS/Ubuntu | Armar el USB WinPE con PowerShell (ver sección 7.3) |
| Técnico con experiencia limitada, sin supervisión | Rearmar el USB WinPE — el flujo OOBE tiene riesgo si se avanza por error |
| Equipos Win11 24H2+ con Shift+F10 bloqueado | Rearmar el USB WinPE (única opción) |
Esto se hace una sola vez, en una máquina con Windows ADK + WinPE add-on instalados. Después el USB sirve para todo el lote y no hay que tocarlo más. El técnico de campo no hace nada de esto — es trabajo previo del responsable del paquete.
copype amd64 C:\WinPE_amd64
$MountDir = "C:\WinPE_amd64\mount"
Dism /Mount-Image /ImageFile:"C:\WinPE_amd64\media\sources\boot.wim" /Index:1 /MountDir:$MountDir
$PkgPath = "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs"
# Orden importante — primero WMI, después .NET, después Scripting, después PowerShell
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\WinPE-WMI.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\en-us\WinPE-WMI_en-us.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\WinPE-NetFX.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\en-us\WinPE-NetFX_en-us.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\WinPE-Scripting.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\en-us\WinPE-Scripting_en-us.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\WinPE-PowerShell.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\en-us\WinPE-PowerShell_en-us.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\WinPE-StorageWMI.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\en-us\WinPE-StorageWMI_en-us.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\WinPE-DismCmdlets.cab"
Dism /Add-Package /Image:$MountDir /PackagePath:"$PkgPath\en-us\WinPE-DismCmdlets_en-us.cab"
Dism /Unmount-Image /MountDir:$MountDir /Commit
# Reemplazar D: por la letra real del USB
MakeWinPEMedia /UFD C:\WinPE_amd64 D:
Si solo querés un WinPE pelado (sin PowerShell), alcanza con copype amd64 C:\WinPE_amd64 y MakeWinPEMedia /UFD C:\WinPE_amd64 D:. Pero el script Get-WindowsAutopilotInfo.ps1 necesita PowerShell, así que para este flujo hay que inyectar los .cab sí o sí.
extraer-hash.cmd y Get-WindowsAutopilotInfo.ps1 a la raíz del USB (el armado los borra). Ver sección 4.2.powershell -Command "Get-Host". Si responde con la versión de PowerShell, el armado funcionó. Si vuelve a decir "no se reconoce", revisar que los .cab se aplicaron sin error en el paso de DISM.
| Problema | Solución |
|---|---|
| Shift+F10 no abre cmd | Las F-keys de Lenovo están "invertidas". Probar Fn+Shift+F10. O activar Fn Lock con Fn+Esc (queda fijo). |
| El equipo Lenovo no bootea del USB | BIOS → Security → Secure Boot → Disabled (temporalmente). O usar el botón Novo → Boot Menu, que ignora Secure Boot. |
| No encuentro el botón Novo | En ThinkPad está en el lateral izquierdo cerca de la bisagra. En IdeaPad nuevas, lo reemplazaron por Fn+F2. Si no aparece, usá la tabla de la sección 3.3. |
"powershell.exe" no se reconoce como un comando interno o externo |
El USB de WinPE no incluye PowerShell. Solución definitiva: armar el USB con los pasos de la sección 7.3. Solución de emergencia (solo equipos con Win11 preinstalado): usar el flujo OOBE de la sección 7.1. |
| Script dice "No se detectó el USB" | El archivo extraer-hash.cmd tiene que estar en la raíz del USB físico (no en el RAM disk X:). Verificar que en el USB queden visibles tanto extraer-hash.cmd como Get-WindowsAutopilotInfo.ps1. Probá otro puerto USB. |
| Error de NuGet / Install-Script falla | Significa que el .cmd cayó al fallback de internet. La causa más probable es que Get-WindowsAutopilotInfo.ps1 no está en la raíz del USB — el camino offline lo evita por completo. Verificar que el .ps1 esté visible en la raíz (no dentro de una subcarpeta). Si efectivamente estás usando el fallback a propósito, verificar internet con ping google.com — sin red el fallback no funciona. |
| El instalador arranca pero no aparece selección de idioma (pantalla negra larga) | El USB puede haber booteado en modo Legacy. Apagar, volver a entrar al boot menu y elegir explícitamente la opción que dice "UEFI: ..." del USB. |
| El CSV tiene menos filas que equipos procesados | Algún equipo falló. Comparar seriales del CSV vs planilla impresa para identificar cuál falta y reprocesarlo. |
Intune dice ZtdDeviceAssignedToAnotherTenant |
Ese Lenovo ya está registrado en otro tenant Autopilot. Hay que pedirle al tenant anterior que lo libere — no es técnico, es comercial. |
| Hash corrupto / error 400 al importar | Abrí el CSV con Notepad, agregá un = al final del hash de la fila problemática. Ver Microsoft Learn Troubleshooting FAQ. |
| TPM no detectado / hash inválido para ese equipo | Botón Novo → BIOS Setup → Security → Security Chip → Active. F10 guardar. Reintentá. |
Imprimir esta página suelta y llevarla al sitio donde se procesan los equipos. Cubre el procedimiento completo en un vistazo.