2012-05-09 6 views
1

Так я загружаю вложенные модули в ListBox.Powershell/C#: Импортировать и вызывать вложенные модули

public partial class Form1 : Form 
    { 
     readonly PowerShell _ps = PowerShell.Create(); 
     public Form1() 
     { 
      InitializeComponent(); 

      _ps.AddScript("Import-Module MyModules"); 
      _ps.AddScript("(Get-Module MyModules).NestedModules"); 
      Collection<PSObject> psObjects = _ps.Invoke(); 

      foreach (var psObject in psObjects) 
      { 
       listBox1.Items.Add(psObject); 
      } 
} 

Теперь, если пользователь выбрал конкретный модуль, я хочу выполнить его.

Это не похоже на работу [хотя модуль должен быть загружен, и он должен распознать команду] -

_ps.AddCommand(listBox1.SelectedItem.ToString()).Invoke(); 

Исключение:

Термин «MyModule1» не признается имя командлета, функция, файл сценария или операционная программа. Проверьте правильность написания имени или если был указан путь, убедитесь, что путь верен, и повторите попытку.

Я предполагаю, что модуль уже был загружен в память, и я должен просто вызвать его. (Обратите внимание, что имя модуля и имя команды такие же)

/////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////

Update: Пробовал это тоже есть загрузка модуля прямо с пути - >> без везения -

Исключение после обновления: [Хотя модуль присутствует, отлично работает в ISE x86 оболочке]

Параметр не может быть найдено, что соответствует имени параметра «C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ Modules \ MyModules \ MyModule1 \ MyModule1.psm1.

////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////////////////

ответ

0

Понял, наконец: -

Вместо того, чтобы делать это -

_ps.AddCommand(listBox1.SelectedItem.ToString()).Invoke(); 

ли это -

_ps.AddScript(listBox1.SelectedItem.ToString()).Invoke(); 
0

Что содержит listBox1.SelectedItem?

Адрес: MyModule1 Адрес: $env:PSModulePath Адрес:

Я подозреваю, что он не находится в пути поиска модуля, но загружен относительным путем в модуле MyModules. Поэтому вам необходимо передать полный путь (или, если вы можете контролировать текущий путь, относительный путь) к основному файлу модуля (.psd1, .psm1 или .dll, если применимо).

+0

Я тоже попытался это, но не повезло - не обновили вопрос с этим , –