# Explorando las Aplicaciones Instaladas en Windows con PowerShell y WMI

- Link: https://binariocero.com/windows/explorando-las-aplicaciones-instaladas-en-windows-con-powershell-y-wmi
- Published: 2025-06-14T15:20:21+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

En entornos de administración de sistemas, especialmente en Windows, es común necesitar
un inventario de las aplicaciones instaladas en un equipo. Esto puede ser útil para
tareas de auditoría, mantenimiento, control de licencias o migraciones. En este 
artículo explicaremos varios comandos de PowerShell y herramientas WMI que permiten
listar software instalado, tanto de sistemas de 32 como de 64 bits.

### 1. `gwmi Win32_Product`

Este comando utiliza **WMI (Windows Management Instrumentation)** para obtener una
lista de productos instalados:

    ```wp-block-preformatted
    gwmi Win32_Product
    ```

**Explicación**:

 * `gwmi` es un alias de `Get-WmiObject`.
 * `Win32_Product` es una clase WMI que representa los productos instalados a través
   del instalador de Windows (MSI).

**Advertencia**: Ejecutar este comando puede **desencadenar una reconfiguración**
de cada paquete MSI instalado, lo que puede hacer que algunos programas se reparen
o reinstalen parcialmente. Por ello, no se recomienda usarlo en producción para 
auditorías pasivas.

### 2. Lectura del Registro: `gp` y filtros personalizados

    ```wp-block-preformatted
    gp HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | ? {![string]::IsNullOrWhiteSpace($_.DisplayName) } | select DisplayName
    ```

**Explicación**:

 * `gp` es un alias de `Get-ItemProperty`.
 * Se accede a dos rutas del registro: una para software de 64 bits y otra para 
   32 bits (Wow6432Node).
 * Se filtra para eliminar entradas vacías usando `Where-Object` (`?` es su alias).
 * Se selecciona solo el campo `DisplayName`.

**Ventaja**: Método no intrusivo, ideal para inventario.

### 3. `Get-WmiObject -Class Win32_Product | Select-Object -Property Name`

    ```wp-block-preformatted
    Get-WmiObject -Class Win32_Product | Select-Object -Property Name
    ```

**Explicación**:

 * Similar al primer comando, pero filtrando y mostrando solo el nombre del producto.
 * Mismo riesgo de reconfiguración al invocar `Win32_Product`.

### 4. `wmic product get name,version`

    ```wp-block-preformatted
    wmic product get name,version
    ```

**Explicación**:

 * Ejecutado en la consola CMD (no PowerShell).
 * Muestra productos MSI instalados con su nombre y versión.
 * También puede provocar reparaciones, como `Win32_Product`.

**Nota**: WMIC ha sido desaprobado en versiones recientes de Windows. Puede no estar
disponible.

### 5. Listado detallado desde el Registro (software de 32 bits)

    ```wp-block-preformatted
    Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize
    ```

**Explicación**:

 * Se accede a la rama del registro para software de 32 bits.
 * Se extrae el nombre, versión, editor y fecha de instalación.
 * `Format-Table -AutoSize` mejora la visualización en consola.

### 6. Listado detallado desde el Registro (software de 64 bits)

    ```wp-block-preformatted
    Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize
    ```

**Explicación**:

 * Igual que el anterior, pero para software de 64 bits.

### Conclusión

Cada uno de estos métodos tiene ventajas y limitaciones. Para tareas de auditoría
o recolección de información sin alterar el sistema, lo más recomendable es acceder
al **Registro de Windows** (métodos 2, 5 y 6). Evita `Win32_Product` y `wmic` si
no estás seguro del impacto que puedan causar.

**Recomendación final**:
Si necesitas integrar esta información en scripts automatizados
o herramientas de monitoreo, usa siempre el acceso al Registro para evitar impactos
indeseados sobre el sistema.
