Invoke-MyFunction — это написанный мной командлет, который берет входной файл, изменяет его и создает новый выходной файл в указанном месте. Если я открою PowerShell на своем рабочем столе, импортирую MyCommandlet.ps1 и запущу
Invoke-MyFunction -InputPath path\to\input -OutputPath path\to\output
все работает как положено. Но когда я пытаюсь импортировать и вызывать команду из программы C# с помощью приведенного ниже кода, командлет не запускается, не записывает выходные данные и не создает выходной файл. Он не генерирует исключение CommandNotFoundException, поэтому я предполагаю, что объект PowerShell распознает мой командлет. Но я не могу понять, почему он не выполняет его.
//set up the PowerShell object
InitialSessionState initial = InitialSessionState.CreateDefault();
initial.ImportPSModule(new string[] { @"C:\path\to\MyCommandlet.ps1" });
Runspace runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
//have MyFunction take input and create output
ps.AddCommand("Invoke-MyFunction");
ps.AddParameter("OutputPath", @"C:\path\to\output");
ps.AddParameter("InputPath", @"C:\path\to\input");
Collection<PSObject> output = ps.Invoke();
Кроме того, после вызова MyFunction объект ps PowerShell не может выполнить никакие другие команды. Даже известные.
Copy-Item
вместоInvoke-MyFunction
, и это работает. Итак, я предположил, что проблема связана сInvoke-MyFunction
. - person dmeyerson   schedule 11.07.2014