【问题标题】:powershell com object windows installerpowershell com 对象 Windows 安装程序
【发布时间】:2019-09-26 14:44:21
【问题描述】:

我想利用以下内容

$wi=new-object -com WindowsInstaller.Installer

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

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

不知道该怎么办$wi.gettype().invokemember("Products","InvokeMethod") 或者某些东西无法找到重载...

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

【问题讨论】:

    标签: powershell com


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

      Get-WmiObject Win32_Product
      

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

      看来这种做法has some issues,所以最好避免。

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

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

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

    【讨论】:

    • win32_product 受到问题的困扰,例如查询强制包协调。
    • @rismoney:你说得对,我做了一项研究并用另一个选项更新了答案。请检查一下。
    【解决方案2】:

    这是我的代码-sn-p:

    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
    

    【讨论】:

      猜你喜欢
      • 2011-04-03
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      相关资源
      最近更新 更多