如何用PowerShell获取MECM检测规则中的MSI Version属性值
如何获取MSI文件的正确版本(模拟MECM操作)
MECM读取的是MSI文件内部数据库的ProductVersion属性,而Get-Item $msiPath | Select-Object VersionInfo获取的是文件本身的版本字段——很多MSI文件的这个字段未填充,所以会显示0.0.0.0。要模拟MECM的操作,直接读取MSI数据库中的对应属性即可,以下是两种可行方法:
方法一:使用Windows Installer COM对象(PowerShell)
这是最直接的方式,无需额外工具:
$msiPath = "C:\路径\到\你的\安装包.msi" # 初始化Windows Installer COM对象 $installer = New-Object -ComObject WindowsInstaller.Installer # 打开MSI数据库(0表示只读模式) $database = $installer.OpenDatabase($msiPath, 0) # 查询ProductVersion属性 $query = "SELECT Value FROM Property WHERE Property='ProductVersion'" $view = $database.OpenView($query) $view.Execute() # 获取查询结果 $record = $view.Fetch() if ($record) { Write-Host "MSI产品版本: $($record.StringData(1))" } # 清理COM对象,避免内存泄漏 [System.Runtime.Interopservices.Marshal]::ReleaseComObject($view) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($database) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($installer) | Out-Null
方法二:使用msiexec命令行提取(备选)
如果无法使用PowerShell,可通过生成安装日志提取版本信息:
msiexec /i "C:\路径\到\你的\安装包.msi" /qn /l*v "msi_version.log"
执行完成后,打开msi_version.log,查找包含ProductVersion:的行,即可找到对应版本号。
内容的提问来源于stack exchange,提问作者Bbb
相关产品推荐
相关产品推荐

