Существует два способа программного импорта модулей, но сначала я расскажу о вашем методе. Ваша строка pipeline.Commands.Add("...")
должна только добавлять команду, а не команду И параметр. Параметр добавляется отдельно:
# argument is a positional parameter
pipeline.Commands.Add("Import-Module");
var command = pipeline.Commands[0];
command.Parameters.Add("Name", @"G:\PowerShell\PowerDbg.psm1")
Приведенный выше конвейерный API немного неудобен в использовании и неофициально не рекомендуется для многих целей, хотя он лежит в основе многих API более высокого уровня. Лучший способ сделать это в powershell v2 или новее - использовать тип System.Management.Automation.PowerShell
и его свободный API:
# if Create() is invoked, a runspace is created for you
var ps = PowerShell.Create(myRS);
ps.Commands.AddCommand("Import-Module").AddArgument(@"g:\...\PowerDbg.psm1")
ps.Invoke()
Другим способом при использовании последнего метода является предварительная загрузка модулей с использованием InitialSessionState, что исключает необходимость явного заполнения начального пространства с помощью Import-Module
. Смотрите мой блог здесь о том, как это сделать:
http://nivot.org/nivot2/post/2010/05/03/PowerShell20DeveloperEssentials1InitializingARunspaceWithAModule.aspx
http://nivot.org/blog/post/2010/05/03/PowerShell20DeveloperEssentials1InitializingARunspaceWithAModule
Надеюсь, это поможет.