Introducción
El despliegue de dispositivos en una organización puede convertirse en un proceso lento y repetitivo si se realiza de forma manual. Windows Autopilot, integrado en Microsoft Intune, permite simplificar y automatizar la configuración inicial de equipos, garantizando que cada dispositivo arranque ya listo para usarse bajo las políticas de seguridad y configuración de la empresa.
Uno de los requisitos fundamentales para que un dispositivo pueda aprovechar Autopilot es registrar su hardware hash (HWID) en Intune. Tradicionalmente, este proceso requería generar un archivo CSV y cargarlo manualmente en el portal, lo que resultaba poco práctico en escenarios de gran escala.
En este artículo aprenderás a automatizar el registro de dispositivos en Autopilot utilizando un script de PowerShell junto con una App Registration en Microsoft Entra ID. Con este enfoque podrás subir los HWID directamente a Intune de forma segura, sin intervención del usuario y con trazabilidad mediante logs locales.
Antes de comenzar, asegúrate de cumplir con los siguientes requisitos:
- Una suscripción activa de Microsoft Intune.
- Acceso de administrador en Entra ID (Intune Administrator o Global Administrator).
- Haber creado una App Registration en Entra ID con los siguientes permisos delegados a la API de Microsoft Graph:
DeviceManagementServiceConfig.ReadWrite.AllDevice.ReadWrite.All
- Haber generado y guardado un Client Secret válido.
- PowerShell 5.1 o superior en el dispositivo.

El registro de dispositivos en Windows Autopilot requiere que cada máquina tenga su Hardware Hash (HWID) cargado en Intune.
Con este método podrás automatizar el proceso usando una App Registration en Entra ID para evitar la interacción manual de inicio de sesión.

El siguiente script extrae el hardware hash y lo sube automáticamente a Autopilot usando el token de la App Registration:
$TenantId="insert-here"
$ClientId="insert-here"
$ClientSecret="insert-here"
$LogPath="C:\Temp"; if (!(Test-Path $LogPath)) {New-Item -Path $LogPath -ItemType Directory|Out-Null}
$LogFile="$LogPath\AutopilotUploader.log"
Function Write-Log{param([string]$M);"$((Get-Date -f 'yyyy-MM-dd HH:mm:ss')) - $M"|Out-File $LogFile -Append;Write-Host $M}
Write-Log "Inicio"
try{
$Body=@{Grant_Type="client_credentials";Scope="https://graph.microsoft.com/.default";Client_Id=$ClientId;Client_Secret=$ClientSecret}
$Token=(Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token" -Method POST -Body $Body).access_token
Write-Log "Token OK"
}catch{Write-Log "Error token $_";exit 1}
$HWIDPath="$env:TEMP\AutopilotHWID.csv"
try{
if(-not(Get-Command Get-WindowsAutopilotInfo -ErrorAction SilentlyContinue)){Install-Script -Name Get-WindowsAutopilotInfo -Force -Scope CurrentUser}
Get-WindowsAutopilotInfo -OutputFile $HWIDPath
Write-Log "HWID en $HWIDPath"
}catch{Write-Log "Error HWID $_";exit 1}
try{
$CSV=Import-Csv $HWIDPath
foreach($D in $CSV){
$Json=@{serialNumber=$D.'Device Serial Number';hardwareIdentifier=$D.'Hardware Hash';groupTag="Autopilot"}|ConvertTo-Json
Invoke-RestMethod -Uri "https://graph.microsoft.com/beta/deviceManagement/importedWindowsAutopilotDeviceIdentities" -Headers @{Authorization="Bearer $Token";"Content-Type"="application/json"} -Method POST -Body $Json
Write-Log "Subido $($D.'Device Serial Number')"
}
}catch{Write-Log "Error upload $_";exit 1}
Write-Log "Fin";exit 0
Guarda el script como Script-UploadHardwareHash.ps1.
En lugar de empaquetar tu script como Win32 app, Intune también permite cargarlo directamente en la sección de Scripts. Esta opción es ideal si lo que quieres es algo rápido, sin necesidad de detección o empaquetado.
Ingresar a la sección de Scripts
- Abre el portal de administración:
Microsoft Intune Admin Center - Ve a:
Devices > Windows > Scripts > Add > Windows 10 and later
- Esta sección está diseñada justamente para cargas de scripts sencillos de PowerShell.
💡 Tip: si planeas ejecutar el script en cientos de dispositivos y necesitas más control (detección, reporting avanzado), quizás te convenga empaquetarlo como Win32 app. Pero para un script de automatización como este, la sección Scripts funciona perfecto.

En este paso vas a subir tu archivo Script-UploadHardwareHash.ps1 y a definir cómo quieres que se ejecute.
Configura así:
- Run this script using the logged on credentials → No
✅ Para que corra con permisos de sistema (no necesita usuario conectado). - Enforce script signature check → No
✅ El script no está firmado digitalmente; si activas esto, no se ejecutará. - Run script in 64-bit PowerShell Host → Yes
✅ Importante, ya que la mayoría de los módulos modernos y Graph funcionan en 64 bits.
💡 Tip: si tu script interactúa con aplicaciones de usuario, puedes usar “Yes” en la primera opción, pero en este caso debe ser “No” porque el HWID se extrae a nivel de sistema.
Ahora define en qué dispositivos se ejecutará el script.
- Ve a Assignments.
- Puedes asignarlo a:
- All devices → si quieres subir el HWID de todos los equipos.
- Grupo piloto → si prefieres probar primero con un subconjunto.
👉 Siempre recomiendo comenzar con un grupo piloto de prueba antes de masificar la política.
Una vez asignado, el script se ejecutará en el siguiente ciclo de sincronización del dispositivo.
- En el dispositivo, puedes forzar la sincronización manualmente con:
Start-IntuneManagementExtensionPolicySync - El script generará un log en:
C:\Temp\AutopilotUploader.log - Si todo fue correcto, verás una línea como:
HWID del dispositivo XXXXX subido correctamente. - En el portal de Intune, ve a:
Devices > Windows enrollment > Devices
y confirma que el dispositivo aparece en la lista.

Con este método puedes automatizar el registro de hardware hash en Autopilot sin pasos manuales, asegurando que cada nuevo dispositivo se integre al flujo de Windows Autopilot + Intune.
💡 Recuerda: este método funciona bien si quieres rapidez. Si necesitas mayor control (detección, reporting avanzado, desinstalación), la mejor práctica es usar el mismo script pero empaquetado como Win32 app.
Octavio Rdz

