- PowerShell permite listar, filtrar y exportar drivers con cmdlets como Get-WmiObject y Get-WindowsDriver.
- driverquery, el Administrador de dispositivos y SCCM (Get-CMDriver) complementan el inventario de controladores.
- Algunos drivers cargados dinámicamente requieren herramientas adicionales como WinDbg o verifier.
- Módulos como PSWindowsUpdate y utilidades externas facilitan actualizar y mantener los drivers al día.

En entornos Windows, controlar qué drivers hay instalados y qué versión tiene cada uno es clave para mantener la estabilidad del sistema, solucionar pantallazos azules o preparar migraciones. PowerShell se ha convertido en una herramienta comodísima para hacer este tipo de inventario sin tener que ir uno por uno por el Administrador de dispositivos.
En las siguientes líneas vas a ver cómo listar controladores desde PowerShell de varias formas, cómo exportarlos a archivos para analizarlos con calma, qué diferencias hay con otros comandos como driverquery o herramientas gráficas, y hasta cómo manejar escenarios más avanzados como imágenes offline o drivers cargados dinámicamente.
Qué es un driver y por qué te interesa listarlo desde PowerShell

En Windows, un controlador o driver es un pequeño bloque de software que hace de intermediario entre el sistema operativo y un componente de hardware (tarjeta gráfica, chipset, almacenamiento, periféricos USB, etc.). Aunque el código que ocupan no es enorme, su impacto en la estabilidad del sistema es gigantesco.
Cuando un driver crítico (por ejemplo, almacenamiento, red, gráfica o chipset) funciona mal, puede provocar bloqueos, pérdida de rendimiento e incluso pantallazos azules (BSOD). Por eso tener una lista clara de los controladores instalados y su versión es tan útil cuando estás depurando fallos o preparando una actualización importante.
Antes de lanzarte a cambiar, desinstalar o revertir controladores, es buena idea minimizar riesgos con un punto de restauración del sistema. Así podrás volver atrás si una actualización de driver sale rana y el equipo empieza a comportarse de forma extraña o ni siquiera arranca correctamente.
Además del punto de restauración, conviene respaldar los datos importantes (documentos, fotos, proyectos de trabajo, etc.), especialmente si vas a tocar drivers de almacenamiento, ya que un error puede hacer que el sistema no monte correctamente las unidades o corrompa información.
Comando básico en PowerShell para listar drivers instalados
La forma más directa de obtener un inventario de controladores desde PowerShell es apoyarse en WMI. Uno de los comandos más usados es:
Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, DriverVersion
Con este cmdlet, PowerShell consulta la clase WMI Win32_PnPSignedDriver y devuelve un listado de los drivers PnP firmados, junto con el nombre del dispositivo y la versión del controlador que tiene asociado en ese momento el sistema.
Si quieres un poco más de contexto sobre cada driver, puedes añadir campos como el nombre amigable, la fecha de publicación o el fabricante. Por ejemplo:
Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, FriendlyName, Manufacturer, DriverVersion, DriverDate
Con esta consulta, obtendrás información mucho más completa para cada entrada, lo que te permite detectar versiones antiguas, fabricantes concretos o drivers que llevan años sin actualizarse.
Cómo exportar la lista de drivers a un archivo (TXT o CSV)
En entornos reales, rara vez basta con ver la lista por pantalla. Lo más cómodo es volcar el resultado a un archivo para analizarlo en Excel, compartirlo con el equipo o conservarlo como foto fija del estado del sistema antes de cambiar nada, por ejemplo antes de borrar controladores antiguos.
Si únicamente necesitas un listado rápido en texto plano, puedes redirigir la salida a un fichero:
Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, DriverVersion > C:\drivers.txt
Ese comando crea un archivo C:\drivers.txt con un listado simple de dispositivo y versión. Ideal para consultas rápidas o para adjuntar a un informe sin complicarte demasiado.
Cuando buscas algo más manejable para filtrar y ordenar, lo suyo es usar CSV y el cmdlet Export-CSV. Un ejemplo muy habitual sería:
Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, FriendlyName, DriverVersion, DriverDate | Export-CSV -Path "./MisDrivers.csv" -NoTypeInformation
Con este comando, en el directorio actual aparecerá un archivo llamado MisDrivers.csv que podrás abrir en Excel o en cualquier hoja de cálculo para ordenar por versión, filtrar por fecha de driver, buscar fabricantes concretos, etc.
Aunque a veces se lee que PowerShell «no permite exportar» la lista de drivers, en realidad sí se puede exportar perfectamente usando redirección de salida o Export-CSV, como acabas de ver. Después puedes copiar, pegar o trabajar con esa información donde quieras.
Filtrar drivers por fabricante, nombre o texto concreto
Lo normal es que no quieras ver todos los controladores a la vez, sino centrarte en un fabricante o tipo de dispositivo concreto. Para eso, puedes encadenar filtros con Where-Object sobre las propiedades de cada driver.
Por ejemplo, si te interesa quedarte sólo con los controladores de Intel, podrías hacer algo tan sencillo como:
Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, DriverVersion | Where-Object { $_.DeviceName -like "*Intel*" }
Este comando recorre todas las entradas devueltas por WMI y mantiene únicamente aquellas cuyo nombre de dispositivo contiene la cadena «Intel». El uso del asterisco como comodín te permite buscar coincidencias parciales en cualquier parte del texto.
La misma idea sirve para localizar drivers relacionados con una aplicación concreta o un tipo de hardware, por ejemplo para actualizar los controladores USB. Si conoces parte del nombre, el fabricante o algún patrón de la ruta, puedes adaptar el filtro a la propiedad más cómoda en cada caso.
Ver drivers desde el Administrador de dispositivos y otras herramientas de Windows
Aunque PowerShell es muy potente para automatizar y exportar listados, Windows sigue ofreciendo herramientas gráficas clásicas para gestionar controladores que conviene conocer y combinar con la vía de comandos.
El primer referente es el Administrador de dispositivos, accesible haciendo clic derecho en «Este equipo» y eligiendo «Administrar», o más rápido con el menú contextual del botón de inicio (Windows + X). Ahí verás un árbol con todas las categorías de hardware instaladas en el sistema.
Los dispositivos que tienen problemas de instalación o funcionamiento suelen aparecer con un icono de advertencia amarilla. Si haces doble clic sobre cualquiera de ellos, se abre la ventana de propiedades, donde puedes comprobar el estado del dispositivo y acceder a la pestaña «Controlador».
Dentro de esa pestaña encontrarás opciones como «Detalles del controlador», «Actualizar controlador», «Revertir el controlador», «Deshabilitar» o «Desinstalar». Estas acciones permiten, respectivamente, ver los archivos del driver, buscar versiones nuevas, volver a una versión anterior, desactivar el dispositivo sin quitarlo o eliminar completamente el controlador del sistema.
Además de estas herramientas, Windows incluye el comando driverquery para usar desde el símbolo del sistema (CMD). Ejecutando driverquery obtendrás un listado con todos los controladores instalados, y con driverquery /v verás información más detallada, como consumo de memoria, fecha de compilación o estado.
driverquery y su relación con PowerShell
El comando driverquery es muy flexible y permite ver distintas vistas del estado de los drivers. Por ejemplo, si quieres listar sólo controladores firmados con más detalle, puedes lanzar:
driverquery /si
Este modo muestra drivers firmados con información adicional útil para auditorías de seguridad o comprobaciones de integridad. Y siempre puedes consultar driverquery /? para ver todos los parámetros disponibles y ajustar la salida a tus necesidades.
Una de las ventajas de driverquery es que puedes integrarlo con PowerShell aprovechando ConvertFrom-CSV. Si generas la salida en formato CSV y la pasas por la tubería, obtendrás objetos manipulables desde PowerShell. Un ejemplo clásico sería:
driverquery.exe /v /fo csv | ConvertFrom-CSV | Select-Object "Display Name", "Start Mode", "Paged Pool(bytes)", Path
Con esto combinas la potencia de driverquery con la manipulación de datos de PowerShell, seleccionando sólo las columnas que te interesan: nombre de visualización, modo de inicio, memoria paginada y ruta del driver en disco. Resulta útil cuando quieres filtrar por tipos concretos, como drivers gráficos.
Hay que tener en cuenta que tanto driverquery como ciertas consultas WMI estándar se centran principalmente en drivers registrados en el sistema, muchos de ellos cargados en el arranque o gestionados a través del registro en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. Algunos controladores que se inyectan dinámicamente en tiempo de ejecución pueden no aparecer en estas listas.
Listar drivers desde PowerShell con Get-WindowsDriver
Para escenarios más avanzados, especialmente cuando trabajas con imágenes offline de Windows (WIM montadas, por ejemplo), resulta muy útil el cmdlet Get-WindowsDriver, que forma parte de las herramientas DISM accesibles desde PowerShell.
Este cmdlet permite mostrar información sobre los paquetes de drivers tanto de la instalación de Windows que está en ejecución como de una imagen montada en una carpeta. La sintaxis principal se divide en dos grandes modos de uso: offline y online.
Para una imagen offline montada en una carpeta, la forma general sería:
Get-WindowsDriver -Path "C:\offline"
Y para trabajar contra el sistema que está en ejecución, usarías el parámetro -Online:
Get-WindowsDriver -Online
Sin parámetros adicionales, Get-WindowsDriver devuelve la lista de drivers de terceros presentes en la imagen. Si añades el modificador -All, verás también controladores predeterminados incluidos de serie en Windows.
Parámetros clave de Get-WindowsDriver
Uno de los parámetros más importantes es -Driver, que te permite especificar un archivo .inf concreto o una carpeta de .inf para obtener datos detallados de esos controladores. Si apuntas a una carpeta, los .inf que no sean paquetes de driver válidos se ignoran automáticamente.
Cuando estás trabajando con una imagen offline, el parámetro -Path indica la ruta raíz de la imagen montada. Si la carpeta Windows no está justo en ese nivel raíz, puedes usar -WindowsDirectory para especificar la subcarpeta relativa donde se encuentra.
El parámetro -SystemDrive se utiliza en escenarios más específicos, como cuando trabajas desde Windows PE y el gestor de arranque está en una partición distinta. En estos casos, sirve para señalar la unidad que contiene los archivos de BootMgr que deben servirse.
En cuanto al registro de actividad, el parámetro -LogPath te deja definir la ruta completa del archivo de log. Si no lo ajustas, se usa por defecto %WINDIR%\Logs\Dism\dism.log, o en Windows PE el espacio de scratch en RAM. Por su parte, -LogLevel determina la verbosidad del registro, con valores que van desde sólo errores hasta incluir información de depuración.
Finalmente, el parámetro -ScratchDirectory es la carpeta temporal donde se extraen archivos durante las operaciones de servicio. Debe ser una ruta local y, una vez terminada la operación, los archivos temporales se eliminan automáticamente para no dejar residuos.
Ejemplos prácticos con Get-WindowsDriver
Para ver rápidamente todos los drivers de la instalación de Windows que tienes ahora mismo en marcha, puedes ejecutar:
Get-WindowsDriver -Online -All
Este comando mostrará todos los controladores (tanto del sistema como de terceros) presentes en la imagen en ejecución. Es una forma muy directa de ver qué paquetes hay instalados sin usar WMI ni el Administrador de dispositivos.
Si estás trabajando con una imagen montada en C:\offline y quieres revisar sólo los drivers de terceros, podrías hacer:
Get-WindowsDriver -Path "C:\offline"
En el caso de querer un informe detallado de un controlador OEM concreto dentro de esa imagen, bastaría con indicar el archivo .inf:
Get-WindowsDriver -Path "C:\offline" -Driver "OEM1.inf"
Incluso puedes dirigirte a un archivo .inf localizado en una ruta específica de controladores, por ejemplo:
Get-WindowsDriver -Path "C:\offline" -Driver "C:\drivers\Usb\Usb.inf"
En todos estos casos, Get-WindowsDriver devuelve objetos que puedes canalizar a Select-Object, Where-Object o Export-CSV para filtrar, ordenar o exportar la información al formato que mejor te encaje.
PowerShell y SCCM: Get-CMDriver para catálogos de controladores
Cuando gestionas un entorno corporativo con Configuration Manager (SCCM), no sólo te interesan los drivers que hay en cada equipo, sino también el catálogo centralizado de controladores que SCCM mantiene para desplegar imágenes y paquetes.
En ese contexto, entra en juego el cmdlet Get-CMDriver, que sirve para recuperar información de controladores de dispositivo gestionados por Configuration Manager. Este cmdlet tiene varias firmas según lo que quieras consultar: por nombre, por identificador numérico, por paquete de drivers o por categoría administrativa.
La sintaxis básica incluye variantes como:
Get-CMDriver
Get-CMDriver -DriverPackageId <String>
Get-CMDriver -DriverPackageName <String>
Get-CMDriver -Id <Int32>
Get-CMDriver -InputObject <IResultObject>
Con estos parámetros puedes orientar tus consultas al catálogo de SCCM, filtrando por nombre de driver, identificador, paquetes asociados o categorías administrativas que hayas definido para organizar tus controladores.
Ejemplos con Get-CMDriver
Si conoces el nombre de un driver concreto, por ejemplo «Surface Serial Hub Driver», puedes obtener sus detalles con:
Get-CMDriver -Name "Surface Serial Hub Driver"
Cuando necesitas revisar varios drivers que comparten un mismo prefijo en el nombre (como toda la familia de controladores Surface) y quieres ver sólo algunas propiedades relevantes, puedes usar algo como:
Get-CMDriver -Fast -Name "Surface*" | Select-Object LocalizedDisplayName, DriverVersion, DriverDate
El modificador -Fast reduce la cantidad de información recuperada y acelera la consulta, cosa que se nota bastante en catálogos grandes. Después, con Select-Object, te quedas únicamente con las columnas que te resultan útiles para tu análisis.
Si gestionas categorías administrativas (por ejemplo, una categoría «Surface» donde agrupas todos esos controladores), puedes encadenar obtención de categorías y drivers de esta forma:
$category = Get-CMCategory -Name "Surface"
Get-CMDriver -Fast -AdministrativeCategory $category
En este caso, primero guardas la categoría en una variable y luego pides a Get-CMDriver que te devuelva todos los controladores asociados a esa categoría, algo muy útil para mantener vistas lógicas de tus controladores en SCCM.
Limitaciones al listar drivers cargados dinámicamente
No todos los controladores se comportan igual. Hay herramientas, como algunas de la suite Sysinternals (por ejemplo, Process Explorer o handle.exe), que inyectan drivers de forma dinámica en el kernel cuando se ejecutan, sin registrarlos como servicios tradicionales cargados en el arranque.
Un caso típico es el driver procexp152.sys (o versiones anteriores como procexp113.sys), asociado a Process Explorer. Este tipo de drivers puede no aparecer en consultas estándar de Get-WmiObject Win32_SystemDriver, ya que estas consultas se apoyan en la información de servicios del registro (CurrentControlSet\Services) y suelen reflejar sobre todo drivers que se cargan con el sistema.
Del mismo modo, driverquery puede no listar todos los controladores inyectados dinámicamente, por lo que si estás depurando BSOD o comportamientos anómalos provocados por tools de terceros que cargan sus propios drivers, quizá tengas que recurrir a otras vías.
Entre esas alternativas se encuentran examinar volcados de memoria del kernel con herramientas como WinDbg, o utilizar utilidades como verifier.exe. El verificador de controladores permite seleccionar drivers que quieres monitorizar y detectar comportamientos inestables, pero la interfaz gráfica ofrece más opciones de enumeración que la versión de línea de comandos, que se centra en consultar y configurar verificación.
En definitiva, para un inventario general y para la mayoría de necesidades de administración, PowerShell, WMI y Get-WindowsDriver cubren muy bien el expediente, pero en casos extremos de depuración de drivers cargados en caliente tendrás que complementar con herramientas de análisis de kernel.
Actualizar drivers con PowerShell usando PSWindowsUpdate
Además de listar controladores, muchos administradores aprovechan PowerShell para automatizar la actualización de drivers vía Windows Update y también para actualizar controladores de sonido. Una forma bastante utilizada es a través del módulo PSWindowsUpdate, que amplía los cmdlets estándar de actualización.
El flujo habitual pasa por habilitar temporalmente la ejecución de scripts firmados, instalar el módulo y luego solicitar actualizaciones de drivers directamente a los servidores de Microsoft.
Un conjunto de comandos típico podría ser:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Install-Module PSWindowsUpdate
Import-Module PSWindowsUpdate
Get-WindowsUpdate
Get-WindowsUpdate -MicrosoftUpdate -Category Driver -Install -AutoReboot
Con esta secuencia habilitas la ejecución de scripts para la sesión actual, instalas e importas el módulo PSWindowsUpdate, compruebas qué actualizaciones hay disponibles y, finalmente, pides que se instalen de la categoría «Driver» desde Microsoft Update, permitiendo que el sistema se reinicie automáticamente si hace falta.
También puedes ampliar el alcance usando un comando que instale todas las actualizaciones detectadas desde Microsoft Update y reinicie sin intervención, por ejemplo:
Get-WindowsUpdate -MicrosoftUpdate -Install -AutoReboot
Esta forma de trabajar es especialmente práctica en parques grandes de equipos, donde quieres homogeneizar versiones de drivers sin ir uno por uno. Eso sí, siempre conviene combinarla con un buen inventario previo de controladores y, en entornos críticos, probar en un grupo piloto antes de desplegar a toda la organización.
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.
