2013-09-18 2 views
-1

я написал модуль PowerShell функции вроде этого:Использовать пользовательский модуль PowerShell в C#

Function docConvert2{ 
     param ([string]$sourceFile, [string]$sourceFilePath) 
     .... 
     .... 
    } 

Я импортированный модуль успешно

enter image description here

И я могу использовать модуль в Powershell командлета

enter image description here

Когда я пытаюсь вызвать функцию в C#, я получил исключение, подобное этому

Термин «docConvert2» не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте правильность написания имени или, если включен путь, проверьте правильность пути и повторите попытку.

C# код

 PowerShell pShell = PowerShell.Create(); 
     pShell.Commands.AddCommand("import-module").AddParameter("Name", "DocConverter2"); 
     pShell.Invoke();//works correctly 
     pShell.AddCommand("docConvert2"); 
     pShell.AddParameter("sourceFile", "'addendum no-3_PREP.doc'"); 
     pShell.AddParameter("sourceFilePath", @"'D:\New\wordler'"); 
     pShell.Invoke();//throw exception 

Что моя ошибка?

ответ

1

попробовать:.

PowerShell pShell = PowerShell.Create(); 
pShell.Commands.AddCommand("import-module").AddParameter("Name","DocConverter2"); 
pShell.Invoke(); 
... 
rest of you code here 
... 

Вы можете также использовать InitialSessionState для предварительной загрузки модуля: read here

+0

Спасибо за совет, но, к сожалению, это не работает. У меня такое же исключение, я написал комментарий об этом в ответе Эоина. – Dreamcatcher

+0

@Dreamcatcher Попробуйте сейчас. Я забыл 'pShell.Invoke();' перед вами код .. –

+0

Я пытаюсь, но, к сожалению, это не работает снова. Однако я нашел некоторый пограничный случай. Если я запустил powershell.exe из Run, Powershell.exe запустил путь «C: \ Windows \ system32 \ WindowsPowerShell \ v1.0>», и если я запустил PowerShell.exe в Start, PowerShell.exe запустится в «C: \ Users» \ Dreamcatcher> ". Это причина проблемы? – Dreamcatcher

0

После создания объекта pShell вам необходимо импортировать модуль, как и в командной строке.

Попробуйте выполнить следующие действия между линиями 1 & 2.

 ps.AddScript(@"import-module DocConverter2"); 
     ps.Invoke(); 

И убедитесь, что ваш C# приложение имеет доступ к пути, что ваш PSM находится в

+0

Я думаю, что это не обязательно, потому что я импортировал модуль раньше, но я пробую ваши советы и не работаю, я получил такое же исключение. Я обновил свой код после ваших советов. – Dreamcatcher

Смежные вопросы