0

我想利用以下

$wi=new-object -com WindowsInstaller.Installer

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

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

不太确定该做什么$wi.gettype().invokemember("Products","InvokeMethod") 或某事会产生无法找到过载...

但现在我迷路了。我在别处看过,但我不想创建整个 XML 文件。我应该能够访问 com 对象方法。

4

2 回答 2

1
  1. 如果你想在 Windows 中获取已安装程序的列表,有一种原生的 Powershell 方式,它实际上是在幕后使用 WMI:

    Get-WmiObject Win32_Product
    

    这是来自Microsoft Scripting Guys的相关文章。

    看来这种方法有一些问题,所以最好避免。

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

  2. 我尽力找到了涉及WindowsInstaller com对象的解决方案,但都指向一篇不再存在的文章。这是关于 stackoverflow的一个。

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

于 2012-10-18T00:09:56.610 回答
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
于 2019-09-25T15:56:07.903 回答