Понимание хостинга PowerShell
Я немного поработал над хостингом PowerShell и много читал, но я вижу странное поведение, и это заставляет меня задуматься, не понимаю ли я хост, как я думал.
Я создаю Runspace с RunspaceFactory:
var runSpace = RunspaceFactory.CreateRunspace()
Я использую одно и то же пространство выполнения во время выполнения моего хоста. Когда я впервые запускаю хост, я вызываю команду Import-Module:
var pipeline = runSpace.CreatePipeline();
var psCommand = new Command("Import-Module");
psCommand.Parameters.Add("Name", directory + "MyModule");
pipeline.Commands.Add(psCommand);
pipeline.Invoke();
"каталог" - это каталог, который не является каталогом модуля по умолчанию. Я могу использовать ту же команду import-module с точно таким же синтаксисом в командном окне PowerShell, и она отлично работает. Похоже, что команда успешно завершена в моем пользовательском хосте. Позже при выполнении я пытаюсь вызвать командлет внутри модуля:
var pipeline = runSpace.CreatePipeline();
var psCommand = new Command("Get-Stuff");
pipeline.Commands.Add(psCommand);
var stuff = pipeline.Invoke();
Но при вызове я получаю исключение, что "Get-Stuff" не является командлетом и т. Д.
Насколько я понимаю, Runspace будет поддерживать этот тип состояния. Разве это не так? Я успешно создал хост в другом проекте. Два основных различия заключаются в том, что этот хост использует каталог модулей по умолчанию (Documents\Modules\), и я вызываю метод CreateRunspace() следующим образом:
var runspace = Runspace.CreateRunspace (customHost);
Должен ли я определить PSHost, чтобы иметь возможность поддерживать состояние?
1 ответ
На самом деле это была проблема с каталогом модуля, имеющего завершающий символ "\".
Модуль импорта -Имя "D:\aaa\Modules\Xyd\" недопустимо.