Понимание хостинга PowerShell - PullRequest
0 голосов
/ 10 марта 2010

Я немного поработал над хостингом 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 Ответ

0 голосов
/ 10 марта 2010

На самом деле это была проблема с каталогом модуля, имеющего завершающий символ "\".

Модуль импорта -Имя "D: \ aaa \ Modules \ Xyd \" недействительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...