powershell com对象windows安装程序

powershell com对象windows安装程序,powershell,com,Powershell,Com,我想利用以下几点 $wi=新对象-com WindowsInstaller.Installer 如果我使用$wi | gm我看不到我想要的“产品”方法。 我想迭代产品并显示系统上安装的所有项目的列表 所以我想。。。让我做一个$wi.gettype().invokemember 不确定要做什么$wi.gettype().invokemember(“产品”,“InvokeMethod”) 或者有些东西找不到过载 但现在我迷路了。我已经在别处看过了,但我不想创建一个完整的XML文件。我应该能够访问co

我想利用以下几点

$wi=新对象-com WindowsInstaller.Installer

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

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

不确定要做什么
$wi.gettype().invokemember(“产品”,“InvokeMethod”)
或者有些东西找不到过载

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

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

    Get-WmiObject Win32_Product
    
    这里有一篇来自中国的相关文章

    看来这种做法,所以最好避免

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

  • 我尽了最大努力找到一个涉及WindowsInstaller com对象的解决方案,但所有这些都指向了。这是

  • 另一种解决办法是尝试一下


  • 下面是我的代码片段:

    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
    

    win32_产品存在很多问题,例如查询强制进行包对账。@rismoney:你说得对,我做了一项研究,并用另一个选项更新了答案。请检查一下。