Ком-объект установщика Windows PowerShell

Я пытаюсь изменить содержимое файла MSI с помощью Powershell. Для этого я создаю экземпляр 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'».

Любая помощь приветствуется.

Спасибо.


person MattH    schedule 16.01.2009    source источник


Ответы (2)


См. Ветку this для некоторых руководство. В основном COM-объект MSI реализован таким образом, что сбивает с толку PS. В этой ветке есть ссылка на сообщение в блоге.

person EBGreen    schedule 16.01.2009
comment
Сообщение в блоге, на которое есть ссылка с этой страницы, похоже, исчезло (пространство Windows Live не существует, говорится на странице ошибки). Кто-нибудь помнит, что было сказано для обходного пути? - person Vimes; 27.06.2011
comment
Извините за ответ на свой вопрос. Похоже, здесь реализован по крайней мере один из обходных путей: snowland.se/2010/02/21/read-msi-information-with-powershell - person Vimes; 27.06.2011

Первоначально принятая ссылка для ответа больше не действительна.

В комментариях JohnB разместил ссылку с отличным примером использования установщика Windows из Powershell.

Также существует проект CodePlex, который включает в себя множество функций и может быть полезен:
Модуль PowerShell установщика Windows

person Ralph Willgoss    schedule 16.08.2012