Справочная информация: Я пишу установку для компонента 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 (не то, что у меня это очень сложно, но это не однострочный текст).