【问题标题】:Understanding PowerShell Hosting了解 PowerShell 托管
【发布时间】:2012-02-09 07:43:25
【问题描述】:

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

【问题讨论】:

    标签: .net powershell sdk powershell-hosting


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-02
      • 2019-04-07
      • 2011-11-23
      • 1970-01-01
      • 2012-04-12
      • 2010-12-19
      • 1970-01-01
      • 2010-12-31
      • 2018-07-10
      相关资源
      最近更新 更多