Powershell – Comprobar y encontrar la guía de producto de una configuración MSI instalada

Para desbloquear totalmente esta sección, debe iniciar sesión

El código de producto es el GUID único para identificar una aplicación o versión de producto; En otras palabras, las diferentes versiones e idiomas del producto deben tener códigos de producto diferentes.

Además, el código de producto se puede usar para consultar el estado de la característica y el estado del producto. Por ejemplo, la API de instalación » MsiQueryFeatureStateEx () «y» MsiQueryProductState ()», etc.

Los siguientes cuatro enfoques pueden proporcionarnos varios métodos para encontrar y recuperar (también de forma remota) el GUID de los paquetes MSI instalados:

Use el «one-liner»de Powershell

Cualquier reparación automática activada por esta opción debería poder cancelarse. Sin embargo, las comprobaciones de integridad del paquete activadas añaden un «ruido» de registro de eventos. No tome en cuenta que el número de identificación es el código del producto (peculiaridad de WMI).

get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

Inicio rápido de Powershell: mantenga presionada la tecla Windows, toque R, escriba «powershell» y presione Entrar.

Use VBScript

Esta opción puede ser más segura que Powershell por las razones que se explican en detalle a continuación.

En esencia, es (mucho) más rápido y no es capaz de activar la autorreparación de MSI, ya que no pasa por WMI (accede a la API COM de MSI directamente, a una velocidad vertiginosa). Sin embargo, es más complicado que la opción de Powershell (varias líneas de código).

Puede probar un VBScript para acceder a la información a través de la interfaz de automatización MSI (característica principal de Windows, no está relacionada con WMI).

  • Copie el siguiente script y péguelo en un *.archivo vbs en su escritorio, e intente ejecutarlo haciendo doble clic. Su escritorio debe tener escritura para usted, o puede usar cualquier otra ubicación con escritura.
  • Este es un VBScript de muestra. Se ha preferido la tersura sobre el manejo de errores y la integridad, pero debe hacer el trabajo con una complejidad mínima.
  • El archivo de salida se crea en la carpeta desde la que se ejecuta el script (la carpeta debe poder escribirse). El archivo de salida se llama msiinfo.csv.
  • Haga doble clic en el archivo para abrirlo en una aplicación de hoja de cálculo, seleccione la coma como delimitador en la importación O simplemente abra el archivo en el bloc de notas o en cualquier visor de texto. La apertura en una hoja de cálculo permitirá funciones de clasificación avanzadas.
  • Este script se puede adaptar fácilmente para mostrar una cantidad significativa de detalles adicionales sobre la instalación de MSI.

'#### Retrieve all ProductCodes (with ProductName and ProductVersion)Set fso = CreateObject("Scripting.FileSystemObject")Set output = fso.CreateTextFile("msiinfo.csv", True, True)Set installer = CreateObject("WindowsInstaller.Installer")On Error Resume Next ' we ignore all errorsFor Each product In installer.ProductsEx("", "", 7) productcode = product.ProductCode name = product.InstallProperty("ProductName") version=product.InstallProperty("VersionString") output.writeline (productcode & ", " & name & ", " & version)Nextoutput.Close

Búsqueda del registro

También puede encontrar el código del producto consultando el registro desde esta clave base: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall.

Presione la tecla F3 y busque el nombre de su producto. Si se trata de un instalador de 32 bits en una máquina de 64 bits, puede estar bajo la siguiente clave: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall.

Las siguientes claves de registro son las ubicaciones comunes en las que buscar y encontrar los GUID de los paquetes MSI:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\UninstallHKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

Archivo MSI original

Puede encontrar el Código de producto en la tabla de propiedades de cualquier archivo MSI (y también de cualquier otra propiedad). Sin embargo, el GUID podría posiblemente (rara vez) ser anulado por una transformación aplicada en el momento de la instalación y, por lo tanto, no coincidir con el GUID con el que el producto está registrado (los enfoques 1 y 2 anteriores informarán del código real del producto, que está registrado con Windows, en escenarios tan raros).

Necesita una herramienta para ver archivos MSI. Vea hacia la parte inferior de la siguiente respuesta para ver una lista de herramientas gratuitas que puede descargar (o vea la opción rápida a continuación): ¿Cómo puedo comparar el contenido de dos (o más) archivos MSI?

Para mayor comodidad y necesidad de velocidad, puede descargar SuperOrca sin demora y sin complicaciones desde este hotlink de descarga directa: la herramienta es lo suficientemente buena para hacer el trabajo: instale, abra MSI e vaya directamente a la tabla de propiedades y encuentre la fila de código de producto (por favor, compruebe siempre un hotlink de descarga directa virustotal.com para hacerlo, escanee en línea utilizando docenas de conjuntos de antivirus y malware para escanear lo que carga).

Otra herramienta, la original, Orca es la herramienta propia de Microsoft, se instala con Visual Studio y el SDK de Windows. Intenta buscar Orca-x86_es-us.msi, en Archivos de programa (x86) e instale el MSI si lo encuentra.

Recuperar códigos de producto

Inicie Powershell (mantenga pulsada la tecla de Windows, toque R, suelte la tecla de Windows, escriba «powershell» y presione ACEPTAR) y ejecute el comando siguiente para obtener una lista de códigos de productos de paquetes MSI instalados junto con la ruta del paquete de caché local y el nombre del producto (maximice la ventana de PowerShell para evitar nombres truncados).

Antes de ejecutar esta línea de comandos, lea el aviso legal a continuación (nada peligroso, solo algunas molestias potenciales). Si está intentando desinstalar un paquete, hay una sección a continuación con algunos ejemplos de msiexec.líneas de comandos exe:

get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

La salida debe ser similar a esta:

Powershell: Verifique y encuentre el GUID de producto de una configuración MSI instalada

Por alguna extraña razón, el » Código de producto «se conoce como» Número de identificación » en WMI. En otras palabras, en la imagen de arriba, el número de identificación es el código del producto.

Debido al extraño diseño de Microsoft, cualquier llamada de WMI a Win32_Product (como el comando PowerShell a continuación) activará una validación del estado del paquete. Además de ser bastante lento, en casos raros puede desencadenar una auto reparación de MSI. Esto puede ser un paquete pequeño o algo enorme, como Visual Studio. En la mayoría de los casos, esto no sucede, pero existe un riesgo.

No ejecute este comando justo antes de una reunión importante, nunca es peligroso (es una consulta de solo lectura), pero puede llevar a una reparación larga en casos muy raros.

También puede obtener la salida en forma de lista (en lugar de tabla):

get-wmiobject -class Win32_Product

En este caso, la salida es similar a esta:

Powershell: Compruebe y busque el GUID de producto de una configuración MSI instalada

Recuperar códigos de producto de un equipo remoto

En teoría, solo debería poder especificar un nombre de equipo remoto como parte del propio comando. Aquí está el mismo comando que se configuró anteriormente para ejecutarse en la máquina «RemoteMachine»(- Se agregó la sección RemoteMachine de nombre de computadora):

get-wmiobject Win32_Product -ComputerName RemoteMachine | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

Esto puede funcionar si se ejecuta con derechos de administrador de dominio en un dominio adecuado. En un entorno de grupo de trabajo (red doméstica / de oficina pequeña), probablemente tenga que agregar credenciales de usuario directamente a las llamadas WMI para que funcione.

Además, las conexiones remotas en WMI se ven afectadas (al menos) por el firewall de Windows, la configuración de DCOM y el Control de Cuentas de usuario (UAC) (además de cualquier factor adicional que no sea de Microsoft, por ejemplo, cortafuegos físicos o virtuales adicionales, cortafuegos de software de terceros, software de seguridad de varios tipos, etc.). Si funcionará o no depende, por lo general, de su configuración exacta.

Powershell

PowerShell requiere la instalación de. NET framework, pero en la mayoría de los sistemas operativos modernos (Windows Server y plataformas Windows, Powershell ya está incluido y disponible). La propia aplicación de PowerShell también puede faltar en la máquina, incluso si.NET está instalado. Por último, varias directivas y privilegios del sistema podrían inhabilitar o bloquear PowerShell.

Si este es el caso, puede probar otras formas de recuperar códigos de producto. Una alternativa es VBScript: es rápido y flexible (pero también se puede bloquear en ciertas máquinas, y el scripting siempre está un poco más involucrado que el uso de herramientas).

Comencemos con una herramienta WMI de Windows incorporada, que generalmente se usa para probar componentes y funcionalidades de WMI: wbemtest.exe.

  • Inicie wbemtest.exe (Mantenga pulsada la tecla de Windows, toque R, suelte la tecla de Windows, escriba «wbemtest».exe » y pulse OK).
  • Haga clic en conectar y, a continuación, en ACEPTAR (el espacio de nombres por defecto es root\cimv2) y, de nuevo, haga clic en «conectar».
  • Haga clic en «Consultar» y escriba este comando WQL (tipo SQL): SELECCIONE IdentifyingNumber,Name,Version DE Win32_Product.
  • Haga clic en «Usar» (o equivalente: la herramienta se localizará).

La captura de pantalla de salida de muestra es la siguiente. No es el formato más bonito, pero puede obtener los datos que necesita. El número de identificación es el código de producto MSI:

Powershell: Compruebe y busque el GUID del producto de una configuración MSI instalada

A continuación, puede probar una herramienta WMI personalizada con más funciones, como WMIExplorer.exe.

  • Esto no está incluido en Windows. Sin embargo, es una herramienta muy buena.
  • Compruébelo en: https://github.com/vinaypamnani/wmie2/releases.
  • Inicie la herramienta, haga clic en Conectar, haga doble clic en ROOT \ CIMV2
  • En la «pestaña Consulta», escriba la siguiente selección de consulta IdentifyingNumber,Name, Version DE Win32_Product y presione Ejecutar.

Obtener GUID de paquetes MSI (Comparar Código de producto y código de actualización)

Iniciar PowerShell: mantenga presionadas las teclas Windows y R juntas, suelte la tecla Windows, escriba «powershell» y presione ACEPTAR o presione Entrar.

Copie el script que aparece a continuación en su totalidad y, a continuación, haga clic con el botón derecho en la ventana de PowerShell.

Para Win32_Property filtramos tanto filas como columnas (UpgradeCode es solo uno de los muchos tipos de filas). Esté preparado para una operación lenta, WMI es muy lento haciendo tales recuperaciones.

$wmipackages = Get-WmiObject -Class win32_product$wmiproperties = gwmi -Query "SELECT ProductCode,Value FROM Win32_Property WHERE Property='UpgradeCode'"$packageinfo = New-Object System.Data.Datatable$packageinfo.Columns.Add("Name")$packageinfo.Columns.Add("ProductCode")$packageinfo.Columns.Add("UpgradeCode")foreach ($package in $wmipackages) { $foundupgradecode = $false #Let's assume that no UpgradeCode is found yet. foreach ($property in $wmiproperties) { if ($package.IdentifyingNumber -eq $property.ProductCode) { $packageinfo.Rows.Add($package.Name,$package.IdentifyingNumber, $property.Value) $foundupgradecode = $true break } } if(-Not ($foundupgradecode)) { # No upgrade code found, add product code to list. $packageinfo.Rows.Add($package.Name,$package.IdentifyingNumber, "") }}$packageinfo | Format-table ProductCode, UpgradeCode, Name# Enable the following line to export to CSV (good for annotation). Set full path in quotes.# $packageinfo | Export-Csv "\MsiInfo.csv"

El código de actualización es el GUID único para identificar una familia de productos. Es decir, los mismos productos con diferentes versiones probablemente se hayan enviado para algunas versiones. Estos productos tienen códigos de producto diferentes, pero están vinculados entre sí mediante el MISMO código de actualización.

Por ejemplo, suponiendo que escribimos un producto llamado «Happy MSI» y este producto solo tiene un paquete MSI para implementarlo en el sistema cliente.

La primera versión de este producto es en realidad el paquete MSI con el nombre » version_1.msi», y la segunda versión es «version_2.msi». Entonces, estos dos MSI deben tener el mismo código de actualización. Cuando los usuarios ejecutan » version_2.msi » en su sistema, el instalador de Windows utilizará el código de actualización para decidir si las versiones anteriores de este producto ya están presentes en el sistema.

La API de instalación «MsiEnumRelatedProducts ()» utiliza el código de actualización para consultar todos los productos de la familia.

Desinstalar paquetes MSI

Si lo que desea hacer es desinstalar el paquete MSI y encontró el código de producto (GUID) para, puede hacerlo de la siguiente manera utilizando un símbolo del sistema con privilegios elevados (buscar cmd.exe, haga clic con el botón derecho y ejecute como administrador):

Opción 1: Desinstalación básica e interactiva sin registro (rápida y fácil):

msiexec.exe /x {00000000-0000-0000-0000-00000000000C}

Explicación Rápida de los Parámetros:

  • /X = ejecutar secuencia de desinstalación
  • {00000000-0000-0000-0000-0000000000C} = Código de producto para desinstalar el producto

También puede habilitar el registro (detallado) y ejecutar en modo silencioso si lo desea, lo que nos lleva a la opción 2:

Opción 2: desinstalación silenciosa con registro detallado (mejor para archivos por lotes):

msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress

Explicación Rápida de los Parámetros:

  • /X = ejecutar secuencia de desinstalación
  • {00000000-0000-0000-0000-0000000000c} = Código de producto para desinstalar el producto
  • / QN = Ejecutar completamente en silencio
  • / L * V «C:\My.log » = Registro detallado en la ruta especificada
  • REBOOT = ReallySuppress = Evitar un reinicio inesperado y repentino

Leave a Reply

Tu dirección de correo electrónico no será publicada.