- PnPUtil gestiona controladores y dispositivos desde consola con control total.
- DriverStore centraliza los paquetes; puedes exportar, instalar y limpiar.
- Comandos clave: add/delete/export, enum de drivers/dispositivos/clases.
- Resolver contextos 32/64 bits (SysNative) evita fallos en despliegues.
Si administras equipos Windows, tarde o temprano te tocará pelearte con controladores. En ese contexto, PnPUtil es la navaja suiza que te ahorra tiempo al gestionar paquetes de drivers desde la línea de comandos de forma segura y repetible.
Más allá de instalar un .INF aislado, esta herramienta permite agregar, instalar, enumerar, exportar, deshabilitar, reiniciar y eliminar tanto controladores como dispositivos, y hacerlo con granularidad de clase, bus, identificadores de hardware o instancias concretas. Verás comandos reales, trucos y problemas habituales (y su solución) para que lo pongas en práctica sin sustos.
Qué es PnPUtil y qué puede hacer
PnPUtil (PnPUtil.exe) es una utilidad de consola para que un administrador realice operaciones sobre paquetes de controladores Plug and Play (PnP) y gestione dispositivos. Es ideal en despliegues, imágenes corporativas o simplemente para mantener limpio el almacén de controladores.
Con PnPUtil puedes añadir un paquete al almacén de controladores, instalarlo en el equipo, eliminarlo, y enumerar lo que ya está presente. Al enumerar, se muestran los paquetes OEM (los que no son parte del sistema), mientras que los paquetes integrados forman parte de la instalación base de Windows o de sus Service Packs y no aparecen como OEM.
Además de los controladores, PnPUtil te deja trabajar con dispositivos concretos: deshabilitar, habilitar, reiniciar, eliminar, escanear cambios de hardware o incluso visualizar el árbol de dispositivos y las clases de configuración. Todo, desde la misma herramienta.
Algo fundamental: muchas de estas operaciones exigen abrir la consola con privilegios administrativos, especialmente cuando modificas el estado del sistema o haces un escaneo de hardware.
Dónde está PnPUtil y cómo obtener ayuda
PnPUtil se entrega de serie en Windows desde Vista; lo encontrarás en %windir%\system32 y no existe un paquete de descarga independiente. Esto significa que ya lo tienes en cualquier Windows moderno sin instalar nada extra.
Para consultar la ayuda embebida, abre una ventana de consola como administrador y ejecuta:
pnputil /?
Ahí verás la sintaxis de todos los comandos disponibles y sus modificadores, lo que te permite descubrir parámetros avanzados sin salir de la sesión.
El DriverStore y los archivos INF: lo que debes saber
Windows mantiene un repositorio de paquetes de controladores en %systemroot%\System32\DriverStore\FileRepository. Es el llamado DriverStore, donde se guardan los drivers que el sistema reconoce e instala cuando detecta el hardware correspondiente.
Los ficheros .INF son los “recetarios” que indican a Windows cómo instalar y configurar un controlador. Suelen venir acompañados de archivos .cat (catálogo de firma), .dll y, a veces, .cab. Hay modelos que se instalan con un único INF, otros requieren varios ficheros.
Un caso típico en entornos corporativos es preintegrar controladores de impresoras para múltiples modelos. Así, cuando despliegas equipos, los drivers ya están disponibles en el sistema sin tener que copiar nada manualmente. Esto se consigue añadiendo los paquetes al DriverStore con PnPUtil.
Ejemplo clásico: desde una consola CMD con privilegios, en la carpeta donde está el INF, puedes ejecutar:
pnputil -a Citizen.inf
El modificador -a (add) añade el paquete al repositorio de Windows. También podrías incluir varios INF de golpe con comodín si mantienes diferentes modelos del mismo fabricante en una misma estructura:
pnputil -a *.inf
Durante el proceso, Windows puede avisar sobre la firma del controlador. Es importante usar drivers firmados por el fabricante para evitar riesgos de seguridad; por costes, algunos proveedores no firman todo su catálogo, así que valora el origen y la confianza del paquete antes de integrarlo.
Comandos esenciales de PnPUtil con ejemplos reales
La potencia de PnPUtil está en su abanico de comandos. A continuación tienes un compendio exhaustivo y en español con los ejemplos clave que te conviene dominar.
Añadir e instalar controladores
Agregar un paquete concreto al almacén:
pnputil /add-driver x:\driver.inf
Agregar varios paquetes desde una carpeta:
pnputil /add-driver c:\oem\*.inf
Agregar e instalar el paquete inmediatamente en dispositivos existentes:
pnputil /add-driver device.inf /install
Consejo: si vas a cargar muchos drivers en una estructura con subcarpetas, puedes usar /subdirs para recorrer recursivamente y combinarlos con /install para aplicarlos en el momento.
Eliminar paquetes del almacén
Eliminar un paquete específico del DriverStore:
pnputil /delete-driver oem0.inf
Forzar la eliminación si hay bloqueos:
pnputil /delete-driver oem1.inf /force
Recuerda que conviene eliminar solo paquetes no en uso para evitar efectos colaterales en dispositivos activos.
Habilitar y deshabilitar dispositivos
Deshabilitar un dispositivo por su identificador de instancia:
pnputil /disable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
Deshabilitar todos los dispositivos que coincidan con un identificador de hardware o compatible:
pnputil /disable-device /deviceid "USB\Class_03"
Deshabilitar dispositivos de una clase concreta en un bus determinado:
pnputil /disable-device /class "USB" /bus "PCI"
Para la operación inversa, puedes habilitarlos con parámetros equivalentes:
pnputil /enable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
pnputil /enable-device /deviceid "USB\Class_03"
pnputil /enable-device /class "USB" /bus "PCI"
Estas acciones son útiles cuando necesitas controlar el estado de dispositivos de forma masiva o por criterios de identificación; por ejemplo, gestionar controladores USB en entornos con muchos periféricos.
Enumerar clases, dispositivos y drivers
Listar todas las clases de configuración de dispositivos:
pnputil /enum-classes
Listar información de una clase concreta (por ejemplo, pantallas):
pnputil /enum-classes /class "Display"
Enumerar dispositivos del sistema. Los habilitados aparecen como Iniciado y los deshabilitados como Deshabilitado:
pnputil /enum-devices
Variantes de enumeración de dispositivos muy útiles:
pnputil /enum-devices /connected
pnputil /enum-devices /instanceid "ROOT\SYSTEM\0000"
pnputil /enum-devices /class "Display"
pnputil /enum-devices /problem 28
pnputil /enum-devices /problem /deviceids
pnputil /enum-devices /deviceid "USB\Class_03"
pnputil /enum-devices /bus "PCI"
Enumerar paquetes de controladores OEM:
pnputil /enum-drivers
Filtrar por clase o incluir los archivos que componen cada paquete:
pnputil /enum-drivers /class "System"
pnputil /enum-drivers /files
Enumerar interfaces
Ver únicamente interfaces habilitadas:
pnputil /enum-interfaces /enabled
Filtrar por GUID de clase de interfaz:
pnputil /enum-interfaces /class "{884b96c3-56ef-11d1-bc8c-00a0c91405dd}"
Esto resulta práctico cuando diagnosticas problemas de comunicación o servicios asociados a determinadas interfaces.
Exportar controladores
Exportar un paquete individual:
pnputil /export-driver oem6.inf .
Exportar todos los paquetes a una ruta (debe existir previamente):
pnputil /export-driver * c:\backup
La exportación masiva es perfecta para hacer backup o preparar despliegues en otros equipos con el mismo sistema operativo.
Quitar, reiniciar y examinar dispositivos
Eliminar un dispositivo por instancia:
pnputil /remove-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
Eliminar dispositivos por identificador de hardware/compatible, o por clase y bus:
pnputil /remove-device /deviceid "USB\Class_03"
pnputil /remove-device /class "USB" /bus "PCI"
Reiniciar dispositivos de forma selectiva o por criterios amplios:
pnputil /restart-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
pnputil /restart-device /deviceid "USB\Class_03"
pnputil /restart-device /class "USB" /bus "PCI"
Explorar cambios de hardware detectados por el sistema:
pnputil /scan-devices
Importante: se requieren privilegios de administrador para ejecutar el escaneo de dispositivos.
Árbol de dispositivos y contenedores
Enumerar el árbol completo de dispositivos:
pnputil /enum-devicetree
Elegir un nodo raíz concreto e incluir información adicional:
pnputil /enum-devicetree "ROOT\SYSTEM\0000"
pnputil /enum-devicetree ROOT\SYSTEM\0000 /drivers
pnputil /enum-devicetree /connected /interfaces
pnputil /enum-devicetree /stack /interfaces /drivers /services
Enumerar contenedores de dispositivos (todos, uno específico y con opciones de salida):
pnputil /enum-containers
pnputil /enum-containers /containerid "{00000000-0000-0000-ffff-ffffffffffff}"
pnputil /enum-containers /connected /devices
pnputil /enum-containers /disconnected /devices /format xml /output-file disconnecteddevices.xml
Estas vistas avanzadas ayudan a entender dependencias y pilas de controladores y servicios cuando hay incidencias complejas.
Exportar e instalar drivers de forma masiva (CMD y PowerShell)
Para mover controladores entre equipos del mismo modelo y sistema, puedes exportar el DriverStore completo con PnPUtil y volver a importarlo. Es rápido y evita depender de utilidades de terceros.
Primero, exporta todos los paquetes a una carpeta de destino ya creada:
pnputil /export-driver * c:\temp\Drivers
Alternativamente, desde PowerShell tienes a mano el cmdlet nativo para el sistema en línea: Export-WindowsDriver
Export-WindowsDriver -Online -Destination "c:\temp\Drivers"
Una vez tengas esa carpeta en un USB, en red o en un NAS, en el equipo de destino puedes instalar los controladores de dos maneras. Manualmente (clic derecho sobre el .INF y “Instalar”) o bien de forma automatizada recorriendo subcarpetas y aplicándolo todo:
pnputil /add-driver "c:\temp\Drivers\*.inf" /subdirs /install /reboot
La opción /reboot permite que el sistema se reinicie si hace falta para completar la instalación. Asegúrate de guardar tu trabajo porque, en ocasiones, será necesario el reinicio para que el driver quede operativo.
Si estás integrando drivers de impresoras genéricas o de un fabricante, verás que, tras la importación, aparecen en la lista de controladores disponibles del sistema, lo que simplifica su selección en el momento de agregar impresoras o dispositivos nuevos.
Limpieza y mantenimiento del almacén de controladores
Con el tiempo, el DriverStore puede acumular paquetes que ya no utilizas. Para mantener un sistema más limpio y seguro, conviene revisar periódicamente qué hay dentro.
Empieza por listar los paquetes OEM (terceros) presentes en el equipo:
pnputil.exe /enum-drivers
Si detectas un paquete que no está en uso y quieres eliminarlo indicando su nombre OEM, puedes hacerlo con el comando adecuado:
pnputil.exe /delete-driver oemX.inf
Cuando necesites añadir un driver nuevo o restaurar uno eliminado, vuelve a integrarlo en el DriverStore:
pnputil.exe /add-driver oem0.inf
Para copias de seguridad, recuerda que puedes exportar un paquete específico o todo el almacén con:
pnputil.exe /export-driver oem6.inf C:\DriverBackup
pnputil.exe /export-driver * C:\DriverBackup
Si alguna vez necesitas reinstalar un dispositivo usando una ruta local, el Administrador de dispositivos permite Actualizar controlador y buscar en la carpeta de backup que hayas preparado. Es una forma sencilla de reaplicar lo exportado.
Casos reales y solución de problemas
En despliegues de impresoras desde un servidor unido a dominio o en instalaciones vía Intune (Win32), es habitual que necesites inyectar el driver al almacén antes de registrar el controlador de impresión. Aquí PnPUtil es clave.
Si el proceso corre en 32 bits pero quieres ejecutar la versión de 64 bits de PnPUtil, invoca la ruta SysNative para evitar la redirección a SysWOW64:
C:\Windows\SysNative\pnputil.exe /add-driver "C:\ruta\al\driver.inf" /install
Ahora bien, hay un problema clásico: el comando responde “el sistema no puede encontrar el archivo especificado” aunque el INF exista. Suele deberse a cuestiones de contexto: ruta relativa, directorio de trabajo, permisos o a que el proceso de 32 bits no resuelve bien System32 sin SysNative.
Buenas prácticas para evitar ese error:
- Usa rutas absolutas y con comillas: «C:\\temp\\PrintDriver\\KOBS9J__.inf».
- Llama siempre a PnPUtil en 64 bits via %windir%\SysNative\pnputil.exe cuando el lanzador sea de 32 bits.
- Verifica que el INF y sus dependencias (.cab, .dll) están en la misma carpeta de trabajo o en rutas accesibles.
- Si ejecutas desde Intune, recuerda que corre como Sistema: crea previamente carpetas de log (por ejemplo, C:\\Temp) y comprueba ACLs.
Ejemplo de instalación con PowerShell y Start-Process robusto, en contexto de 64 bits y con registro de salida:
$pnputil = "$env:windir\SysNative\pnputil.exe"
$inf = "C:\\temp\\PrintDriver\\KOBS9J__.inf"
$log = "C:\\temp\\pnputil_log.txt"
New-Item -Path (Split-Path $log) -ItemType Directory -Force | Out-Null
Start-Process -FilePath $pnputil -ArgumentList @("/add-driver", $inf, "/install") -Wait -NoNewWindow -RedirectStandardOutput $log -PassThru
Si el log sale vacío, prueba a redireccionar también el error o a capturar directamente la salida con PowerShell nativo (sin Start-Process), para quedarte con el código de retorno:
& $pnputil /add-driver $inf /install | Tee-Object -FilePath $log
En instalaciones de impresoras, un flujo típico es: añadir el driver con PnPUtil y luego registrar el Printer Driver (por ejemplo, con Add-PrinterDriver) haciendo referencia a la ruta del INF ya en el DriverStore. Si el paquete contiene un .cab (como gppcl6.cab en drivers Canon), asegúrate de que esté presente porque el INF puede depender de él.
Otro fallo recurrente en Intune es que el script cree correctamente un archivo “marca” al final (señal de que el script llegó al final), pero el driver no se instaló. Esto suele significar que el Start-Process no elevó correctamente o que el contexto no encontró la ruta del INF. Usar SysNative, rutas completas, crear C:\\Temp antes y validar el código de salida de PnPUtil ayuda a cerrar el círculo.
Por último, cuando hagas un escaneo de cambios con /scan-devices, recuerda que exige derechos de administrador. Ejecuta siempre la consola elevada para evitar errores de acceso.
Dominar PnPUtil marca la diferencia en entornos reales: desde preparar imágenes con impresoras preintegradas o exportar controladores antes de formatear, hasta sanear el DriverStore y diagnosticar dispositivos problemáticos. Con los comandos y prácticas de este artículo, tienes una base sólida para gestionar drivers en Windows de forma fiable y con menos sorpresas.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.