我已经完成了一些托管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来保持状态吗?