Icono del sitio Binario 0

Cómo desinstalar una aplicación MSI de forma desatendida en Windows

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

En entornos corporativos o automatizados, es habitual necesitar la desinstalación silenciosa (o "desatendida") de aplicaciones instaladas mediante archivos .msi. Este procedimiento es común en despliegues masivos, scripts de mantenimiento, o tareas de remediación vía RMM o sistemas de gestión remota.

A continuación, te explicamos cómo hacerlo de forma genérica usando PowerShell o la línea de comandos de Windows.

Desinstalación silenciosa con msiexec

El comando base para desinstalar una aplicación .msi es:

msiexec /x {PRODUCT-CODE} /qn

¿Cómo obtener el ProductCode de una aplicación?

El ProductCode o GUID puede encontrarse con PowerShell utilizando la clase Win32_Product:

Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -like "*NombreApp*" } | Select-Object Name, IdentifyingNumber

Este comando busca aplicaciones instaladas cuyo nombre contenga la cadena "NombreApp" y devuelve el nombre y su GUID asociado.

Por ejemplo:

Name                          IdentifyingNumber
---- -----------------
MiAplicacionEjemplo {12345678-ABCD-1234-ABCD-1234567890AB}

¿Es siempre igual el GUID del producto?

No necesariamente. Aunque a veces el ProductCode se mantiene constante en todas las instalaciones si se usa exactamente el mismo .msi, hay varios factores que pueden hacer que este código varíe:

Por lo tanto, lo más recomendable es detectarlo dinámicamente en cada máquina.

Script genérico en PowerShell para desinstalar de forma segura

A continuación, un ejemplo de script en PowerShell que detecta el producto por nombre y lo desinstala silenciosamente:

$nombreApp = "NombreApp"

$producto = Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -like "*$nombreApp*" }

if ($producto) {
Write-Host "Desinstalando $($producto.Name)..."
Start-Process "msiexec.exe" -ArgumentList "/x $($producto.IdentifyingNumber) /qn" -Wait
Write-Host "Desinstalación completada."
} else {
Write-Host "No se encontró ninguna aplicación que coincida con: $nombreApp"
}

Este script:

Consideraciones adicionales

Conclusión

La desinstalación desatendida de paquetes MSI es un proceso eficaz y sencillo siempre que se disponga del ProductCode correcto. Usar scripts dinámicos que busquen por nombre es la mejor práctica para entornos donde los GUID pueden variar.

Salir de la versión móvil