powershell com对象windows安装程序

时间:2012-10-18 00:05:16

标签: powershell com

我想利用以下

$ wi = new-object -com WindowsInstaller.Installer

如果我做$ wi | gm我看不到我想要的方法“产品” 我想迭代产品并显示系统上安装的所有项目的列表。

所以我想......让我做一个$ wi.gettype()。invokemember

不确定要做什么$ wi.gettype()。invokemember(“Products”,“InvokeMethod”) 或者某些产量无法找到超载...

但现在我迷路了。我已经看过其他地方,但我不想创建一个完整的xml文件。我应该能够访问com对象方法。

2 个答案:

答案 0 :(得分:1)

  1. 如果您尝试获取Windows中已安装程序的列表,则有一种本机Powershell方式,实际上是在幕后使用WMI:

    Get-WmiObject Win32_Product
    

    以下是Microsoft Scripting Guys的相关文章。

    看来这种方法has some issues,最好避免使用。

      

    当您查询此类时,提供程序的工作方式就是它   实际上在每个MSI上执行Windows Installer“重新配置”   在执行查询的系统上打包!

  2. 我尽力找到涉及WindowsInstaller com对象的解决方案,但所有这些解决方案都指向an article that no longer exists。这是one on stackoverflow

  3. 另一种解决方案是尝试psmsi on CodePlex

答案 1 :(得分:0)

这是我的代码段:

cls
$msi = New-Object -ComObject WindowsInstaller.Installer
$prodList = foreach ($p in $msi.Products()) {
    try {
        $name = $msi.ProductInfo($p, 'ProductName')
        $ver  = $msi.ProductInfo($p, 'VersionString')
        $guid = $p
        [tuple]::Create($name, $ver, $guid)
    } catch {}
}
$prodlist