了解PowerShell主机

时间:2010-03-10 16:07:52

标签: .net powershell sdk powershell-hosting

我做了一些托管PowerShell的工作并做了很多阅读,但我看到了奇怪的行为,这让我想知道我是否不像我想的那样理解主机。

我正在使用RunspaceFactory创建一个Runspace:

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();

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

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

但是在调用时我得到的例外是“Get-Stuff”不是cmdlet ..etc。

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

var runspace = Runspace.CreateRunspace(customHost);

我是否必须定义PSHost才能维持状态?

1 个答案:

答案 0 :(得分:0)

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

Import-Module -Name“D:\ aaa \ Modules \ Xyd \”无效。