Выполнение скрипта Powershell, содержащего командлеты - PullRequest
0 голосов
/ 23 мая 2018

Мне нужно выполнить скрипт Powershell, содержащий мои пользовательские командлеты (существуют в другой сборке) из C #.Я попробовал следующий подход, но он просто вызывает командлет только один раз, и все, а в сценарии этот командлет написан более одного раза.

Get-MyParameter myTasks

Start-Process notepad.exe

Get-MyParameter myTasks
Get-MyParameter myTasks
Get-MyParameter myTasks

В то время как MyParameter записан в другой сборке.Пробный код:

var powerShellInstance = PowerShell.Create();
powerShellInstance.Runspace = runSpace;

var command = new Command("Import-Module");

command.Parameters.Add("Assembly", Assembly.LoadFrom(@"..\CommandLets\bin\Debug\Commandlets.dll"));

powerShellInstance.Commands.AddCommand(command);
powerShellInstance.Invoke();

powerShellInstance.Commands.Clear();    
powerShellInstance.Commands.AddCommand(new Command("Get-MyParameter"));             

powerShellInstance.AddScript(psScript);

var result = powerShellInstance.Invoke();

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 23 мая 2018

Вы добавляете скрипт в тот же конвейер, в который добавили команду Get-MyParameter.По сути, вы делаете

get-myparameter | { … your script … }

Попробуйте использовать вместо этого отдельные конвейеры.

var result1 = powerShellInstance.AddCommand("Get-MyParameter").Invoke()
var result2 = powerShellInstance.AddScript(psScript).Invoke();

Также вы можете упростить код загрузки вашего модуля до

powerShellInstance.AddCommand("Import-Module").
    AddParameter("Name", @"..\CommandLets\bin\Debug\Commandlets.dll")).
        Invoke();
...