我已经完成了一些托管 PowerShell 的工作并阅读了大量内容,但我看到了奇怪的行为,这让我想知道我是否像我想象的那样不了解主机。
我正在使用 RunspaceFactory 创建一个运行空间:
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();
“目录”是一个不是默认模块目录的目录。我可以在 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 才能保持状态?