【问题标题】:PowerShell: Get the MSI product code out of a MSI file without installing?PowerShell:在不安装的情况下从 MSI 文件中获取 MSI 产品代码?
【发布时间】:2015-11-02 08:07:14
【问题描述】:

是否有可能在不使用 PowerShell 安装的情况下从 MSI 文件中检索 MSI 产品代码?我想将 MSI 文件的产品代码与机器上安装的 MSI 代码进行比较,以了解该文件是否是过去安装的。

【问题讨论】:

标签: powershell windows-installer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这是一个基于this article读取产品代码的脚本:

    $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 现在包含产品代码。

    【讨论】:

    • 谢谢!不幸的是,您需要文章中的整个脚本代码,提取的内容不是这样工作的。不过谢谢!这解决了问题!
    • 将“$WindowsInstaller”替换为“$comObjWI”,提取即可工作
    • 我认为您需要删除代码第 3 行 $comObjWI.getType() 之间的空格
    猜你喜欢
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多