Я пытаюсь добавить довольно ограниченную поддержку PowerShell в свое приложение: я хочу иметь возможность периодически запускать определенный пользователем сценарий PowerShell и показывать любой вывод и (в конечном итоге) иметь возможность обрабатывать уведомления о ходе выполнения и запросы пользователей. Мне не нужна интерактивная поддержка в стиле командной строки или (я думаю) удаленный доступ или возможность запуска нескольких одновременных сценариев, если только пользовательский сценарий не делает это сам из оболочки, которую я размещаю. В конце концов я захочу запустить скрипт асинхронно или в фоновом потоке и, возможно, заполнить оболочку некоторыми начальными переменными и, возможно, командлетом, но настолько "причудливым", как эта функция, скорее всего, получится.
Я читал документацию MSDN о написании кода хост-приложения, но, несмотря на то, что он радостно объясняет, как создать объект PowerShell
, или Runspace
, или RunspacePool
, или Pipeline
, там нет указаний на то, почему один из этих подходов предпочтительнее другого.
Я думаю, что я отношусь к одному из этих двух, но мне нравятся некоторые отзывы о том, какой подход лучше выбрать:
PowerShell shell = PowerShell.Create();
shell.AddCommand(/* set initial state here? */);
shell.AddStatement();
shell.AddScript(myScript);
shell.Invoke(/* can set host! */);
или:
Runspace runspace = RunspaceFactory.CreateRunspace(/* can set host and initial state! */);
PowerShell shell = PowerShell.Create();
shell.Runspace = runspace;
shell.AddScript(myScript);
shell.Invoke(/* can set host here, too! */);
(Одним из обязательных методов класса PSHost
-derived является EnterNestedPrompt()
, и я не знаю, может ли пользовательский скрипт, который я запускаю, вызывать его, или нет. Если это возможно, то я Вы будете ответственны за "запуск нового вложенного цикла ввода" (как здесь)... если это повлияет на то, какой путь выбрать выше, это также было бы полезно знать.)
Спасибо!