0

以下を活用したい

$wi=new-object -com WindowsInstaller.Installer

実行すると、 「Products」$wi |gmが必要なメソッドが表示されません。製品を繰り返し、システムにインストールされているすべてのアイテムのリストを表示したいと思います。

だから私は思った...私にやらせて$wi.gettype().invokemember

何をすべきかわからない$wi.gettype().invokemember("Products","InvokeMethod") 、または何かがもたらすものは過負荷を見つけることができません...

しかし今、私は道に迷っています。他の場所を調べましたが、XMLファイル全体を作成したくありません。comオブジェクトメソッドにアクセスできるはずです。

4

2 に答える 2

1
  1. Windowsにインストールされているプログラムのリストを取得しようとしている場合は、Powershellのネイティブな方法があり、実際には舞台裏でWMIを使用しています。

    Get-WmiObject Win32_Product
    

    これは、 MicrosoftScriptingGuysの関連記事です。

    このアプローチにはいくつかの問題があるようですので、避ける方がよいでしょう。

    このクラスをクエリする場合、プロバイダーが機能する方法は、クエリを実行するときに、システム上のすべてのMSIパッケージでWindowsインストーラーの「再構成」を実際に実行することです。

  2. 私はWindowsInstallercomオブジェクトを含む解決策を見つけるために最善を尽くしましたが、それらはすべて、もはや存在しない記事を指しています。これが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 に答える