【问题标题】:Run many custom C# PowerShell cmdlet from one another custom cmdlet从另一个自定义 cmdlet 运行许多自定义 C# PowerShell cmdlet
【发布时间】:2014-01-23 11:01:21
【问题描述】:

我尝试从另一个自定义 cmdlet 运行我的自定义 PowerShell cmdlet。奇怪的是我可以从 Windows Powershell 手动运行我的自定义 cmdlet 并且它可以工作,但是当我尝试触发相同的自定义 cmdlet 时它会失败。

运行-演示代码:

Run-Demo 基本上是这样的: 我知道它缺少参数,但它应该在 PowerShell 中找到 cmdlet。

                Command cmd = new Command("Run-ContentInventory");
                Runspace runSpace = RunspaceFactory.CreateRunspace();
                runSpace.Open();
                Pipeline pipeline = runSpace.CreatePipeline();
                pipeline.Commands.Add(cmd);
                Collection<PSObject> output;
                output = pipeline.Invoke();
                foreach (PSObject psObject in output)
                {
                    Console.WriteLine(psObject);
                }

感谢您的帮助!

【问题讨论】:

  • 你能把“Run-Demo”的代码贴出来吗?
  • 不用先导入吗?
  • 如果您从 Visual-Studio 部署 cmdlet,它将导入。但我也尝试在构建解决方案时导入(-module)手动创建的 dll。结果相同。

标签: c# powershell visual-studio-2012 powershell-cmdlet


【解决方案1】:

您的问题的核心是您正在创建一个新的运行空间,它不会加载您的 cmdlet。这是您应该避免的事情,因为它会占用大量内存,并且在尝试同步两个运行空间时会产生很多问题。

诀窍是使用管道。声明一个 Pipeline 类型的私有字段,然后在 BeginProcessing 中添加:

 pipeline = Runspace.DefaultRunspace.CreateNestedPipeline();

请在 EndProcessing 中处理嵌套管道。

在 processrecord 中,您的代码应该几乎保持不变。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多