PowerShell:无需安装即可从 MSI 文件中获取 MSI 产品代码?

问题描述 投票:0回答:3

是否可以从 MSI 文件中检索 MSI 产品代码,而无需使用 PowerShell 安装它?我想将 MSI 文件的产品代码与机器上安装的 MSI 代码进行比较,以查明该文件是否过去安装过。

powershell windows-installer
3个回答
9
投票

这是一个基于[本文][1]读取产品代码的脚本:

$path = "pathto.msi"

$comObjWI = New-Object -ComObject WindowsInstaller.Installer
$MSIDatabase = $comObjWI.GetType().InvokeMember("OpenDatabase","InvokeMethod",$Null,$comObjWI,@($Path,0))
$Query = "SELECT Value FROM Property WHERE Property = 'ProductCode'"
$View = $MSIDatabase.GetType().InvokeMember("OpenView","InvokeMethod",$null,$MSIDatabase,($Query))
$View.GetType().InvokeMember("Execute", "InvokeMethod", $null, $View, $null)
$Record = $View.GetType().InvokeMember("Fetch","InvokeMethod",$null,$View,$null)
$Value = $Record.GetType().InvokeMember("StringData","GetProperty",$null,$Record,1)

$Value
现在包含产品代码。 [1]:http://www.scconfigmgr.com/2014/08/22/how-to-get-msi-file-information-with-powershell/


7
投票

从 MSI 包获取 ProductCode 的更短方法:

Get-AppLockerFileInformation -Path "C:\PathTo\my.msi" | select -ExpandProperty Publisher | Select BinaryName

0
投票

如果计算机上未安装该产品,您可以尝试卸载它并写入带有标志 /lv 的日志。这应该在日志中记录产品代码。

msiexec /x c:\temp\myproduct.msi /lv mymsi.log
select-string "ProductCode" -path mymsi.log
© www.soinside.com 2019 - 2024. All rights reserved.