我正在尝试使用Powershell修改MSI文件的内容。为此,我创建了一个WindowsInstaller.Installer的实例,然后使用$ installer.OpenDatabase和$ database.OpenView。类似的功能在VBScript中有效,我看到了在线样本似乎有效。
$installer = new-object -comobject "WindowsInstaller.Installer"
$database = $installer.OpenDatabase("C:\Temp\Setup.msi", 1)
对于上面的代码,我收到错误“方法调用失败,因为[System .__ ComObject]不包含名为'OpenDatabase'的方法。”
$installer = new-object -comobject "WindowsInstaller.Installer"
$database = $installer.InvokeMethod("OpenDatabase","C:\Temp\Setup.msi", 1)
如果我尝试使用$ installer.InvokeMethod我得到相同的错误“方法调用失败,因为[System .__ ComObject]不包含名为'InvokeMethod'的方法。”
非常感谢任何帮助。
感谢。
答案 0 :(得分:4)
请参阅this主题获取一些指导。基本上,MSI COM对象的实现方式会混淆PS。有一个博客文章的链接在该主题中讨论它。
答案 1 :(得分:2)
最初接受的答案链接不再有效。
在评论中,JohnB发布了一个链接,其中有一个很好的例子,说明如何使用Powershell中的Windows Installer。
还有一个CodePlex项目包含了很多功能,可能很有用:
Windows Installer PowerShell Module