0

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

4

1 回答 1

0

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

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

于 2010-03-10T17:28:16.057 回答