Trabajar con instalaciones de software

Las aplicaciones que se han instalado con Windows Installer se pueden encontrar mediante consultas de WMI, pero no todas las aplicaciones usan Windows Installer. Las técnicas específicas para buscar aplicaciones instaladas con otras herramientas dependen del software del instalador.

Por ejemplo, las aplicaciones que se instalan copiando los archivos a una carpeta del equipo no se pueden administrar normalmente con las técnicas aquí descritas. Puede administrar estas aplicaciones como archivos y carpetas recurriendo a las técnicas descritas en Trabajar con archivos y carpetas.

En el caso de software instalado mediante un paquete de instalador, Windows Installer se puede encontrar mediante las clases Win32Reg_AddRemovePrograms o Win32_Product, pero ambas plantean problemas. Win32Reg_AddRemovePrograms solo está disponible si se usa System Center Configuration Manager (SCCM), mientras que la clase Win32_Product puede ser lenta y tiene efectos secundarios.

Precaución

La clase Win32_Product no está optimizada para consultas. Las consultas que utilizan filtros con caracteres comodín provocan que WMI utilice el proveedor MSI para enumerar todos los productos instalados y, a continuación, analice la lista completa de forma secuencial para controlar el filtro. Esto también inicia una comprobación de coherencia de los paquetes instalados, verificando y reparando la instalación. La validación es un proceso lento y puede provocar errores en los registros de eventos. Para obtener más información, consulte el artículo de KB 974524.

En este artículo se proporciona un método alternativo para buscar software instalado.

Consulta de la clave del Registro Uninstall para buscar el software instalado

La mayoría de las aplicaciones estándar registran un desinstalador con Windows, por lo que podemos trabajar con ellas localmente buscándolas en el Registro de Windows. No hay ninguna manera garantizada de encontrar todas las aplicaciones en un sistema. Sin embargo, es posible encontrar todos los programas con las listas que se muestran en Agregar o quitar programas en la clave del Registro siguiente:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall.

Podemos encontrar el número de aplicaciones instaladas si contamos el número de claves del Registro:

$UninstallPath = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall'
(Get-ChildItem -Path $UninstallPath).Count
459

Podemos realizar más búsquedas en esta lista de aplicaciones mediante varias técnicas. Para ver los valores del Registro en las claves del Registro bajo Uninstall, use el método GetValue() en las claves del Registro. El valor del método es el nombre de la entrada del Registro. Por ejemplo, use el comando siguiente a fin de buscar los nombres para mostrar de las aplicaciones en la clave Uninstall:

Get-ChildItem -Path $UninstallPath |
    ForEach-Object -Process { $_.GetValue('DisplayName') } |
    Sort-Object

Nota

No hay ninguna garantía de que los valores DisplayName sean únicos.

En el ejemplo siguiente se genera una salida similar a la de la clase Win32Reg_AddRemovePrograms:

Get-ChildItem $UninstallPath |
    ForEach-Object {
        $ProdID = ($_.Name -split '\\')[-1]
        Get-ItemProperty -Path "$UninstallPath\$ProdID" -ea SilentlyContinue |
        Select-Object -Property DisplayName, InstallDate, @{n='ProdID'; e={$ProdID}}, Publisher, DisplayVersion
} | Select-Object -First 3

Por motivos de brevedad, en este ejemplo se usa Select-Object para limitar a tres el número de elementos devueltos.

DisplayName    : 7-Zip 22.01 (x64)
InstallDate    :
ProdID         : 7-Zip
Publisher      : Igor Pavlov
DisplayVersion : 22.01

DisplayName    : AutoHotkey 1.1.33.10
InstallDate    :
ProdID         : AutoHotkey
Publisher      : Lexikos
DisplayVersion : 1.1.33.10

DisplayName    : Beyond Compare 4.4.6
InstallDate    : 20230310
ProdID         : BeyondCompare4_is1
Publisher      : Scooter Software
DisplayVersion : 4.4.6.27483