2010-03-10 32 views
0

我已经完成了一些托管PowerShell的工作,并做了大量的阅读,但我看到了奇怪的行为,这让我怀疑我是否像我以前那样理解主机。了解PowerShell托管

我创建一个运行空间与RunspaceFactory:

var runSpace = RunspaceFactory.CreateRunspace() 

我利用我的整个主机的执行相同的运行空间。当我第一次启动主机时,我调用导入模块命令:

var pipeline = runSpace.CreatePipeline(); 
var psCommand = new Command("Import-Module"); 
psCommand.Parameters.Add("Name", directory + "MyModule"); 
pipeline.Commands.Add(psCommand); 
pipeline.Invoke(); 

“directory”是一个不是默认模块目录的目录。我可以在PowerShell命令窗口中使用相同的import-module命令和完全相同的语法,并且工作正常。该命令似乎在我的自定义主机中成功完成。后来在执行我尝试调用模块内的cmdlet:

var pipeline = runSpace.CreatePipeline(); 
var psCommand = new Command("Get-Stuff"); 
pipeline.Commands.Add(psCommand); 
var stuff = pipeline.Invoke(); 

但在调用我得到的例外是“GET-东西”是不是cmdlet..etc。

我的理解是一个Runspace会保持这种状态。这不是这种情况吗?我在另一个项目中成功创建了一个主机。主要区别在于该主机正在使用默认模块目录(Documents \ Modules \),并且我调用CreateRunspace()方法,如下所示:

var runspace = Runspace.CreateRunspace(customHost);

我必须定义一个PSHost来保持状态吗?

回答

0

这实际上是模块的目录有尾随“\”的问题。

导入模块-Name“D:\ aaa \ Modules \ Xyd \”无效。