我想利用以下
$ wi = new-object -com WindowsInstaller.Installer
如果我做$ wi | gm我看不到我想要的方法“产品” 我想迭代产品并显示系统上安装的所有项目的列表。
所以我想......让我做一个$ wi.gettype()。invokemember
不确定要做什么$ wi.gettype()。invokemember(“Products”,“InvokeMethod”) 或者某些产量无法找到超载...
但现在我迷路了。我已经看过其他地方,但我不想创建一个完整的xml文件。我应该能够访问com对象方法。
答案 0 :(得分:1)
如果您尝试获取Windows中已安装程序的列表,则有一种本机Powershell方式,实际上是在幕后使用WMI:
Get-WmiObject Win32_Product
以下是Microsoft Scripting Guys的相关文章。
看来这种方法has some issues,最好避免使用。
当您查询此类时,提供程序的工作方式就是它 实际上在每个MSI上执行Windows Installer“重新配置” 在执行查询的系统上打包!
我尽力找到涉及WindowsInstaller com对象的解决方案,但所有这些解决方案都指向an article that no longer exists。这是one on stackoverflow。
另一种解决方案是尝试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