Вызов команд PowerShell из пользовательского действия C # при установке WiX - PullRequest
1 голос
/ 14 августа 2010

Справочная информация: Я пишу установку для компонента SharePoint. В дополнение к загрузке программного обеспечения на целевой компьютер, я хочу правильно настроить его. SharePoint (особенно в 2010 г.) предоставляет свои функции управления через PowerShell. Поэтому я написал пользовательское действие на C # для вызова ряда команд, например:

Runspace runSpace = RunspaceFactory.CreateRunspace();
runSpace.Open();
Pipeline pipeline = runSpace.CreatePipeline();

Command addSnapin = new Command("Add-PSSnapin");
addSnapin.Parameters.Add("Name", "Microsoft.SharePoint.Powershell");
pipeline.Commands.Add(addSnapin);
pipeline.Invoke();

Command getSearchApp = new Command("Get-SPEnterpriseSearchServiceApplication");
pipeline = runSpace.CreatePipeline();
pipeline.Commands.Add(getSearchApp);

Object searchApp = pipeline.Invoke().First().BaseObject;
/* pass searchApp to other PS cmdlets */

Проблема: Когда я запускаю этот код из тестового исполняемого файла, он работает нормально. Тем не менее, он не работает при запуске из пользовательского действия. Это терпит неудачу, и журнал содержит сообщение «Термин« Get-SPEnterpriseSearchServiceApplication »не распознается как имя командлета ...». Предполагается, что этот командлет будет импортирован командой Add-PSSnapin (насколько я могу судить).

Вопросы: Почему PS не может найти функцию, когда в консоли PS работает одна и та же последовательность команд и когда она запускается в моей тестовой программе? Есть ли более простой способ пройти этот процесс? В WiX, похоже, не было большой поддержки сложных пользовательских действий PS (не то, что у меня это очень сложно, но это не однострочный текст).

1 Ответ

3 голосов
/ 16 августа 2010

В данном конкретном случае оснастка не может быть загружена, поскольку настраиваемое действие выполнялось как 32-разрядный процесс. Я изменил настройки сборки, чтобы скомпилировать его как x64, и он начал работать. Предложение Кита было полезно (+1) - я предполагал, что из-за сбоя возникнет исключение, но это не так.

...