从另一个自定义cmdlet运行许多自定义C#PowerShell cmdlet

时间:2014-01-22 19:05:36

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

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

Powershell

运行演示代码:

它基本上就像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);
                }

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

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

 pipeline = Runspace.DefaultRunspace.CreateNestedPipeline();

请在EndProcessing中处理嵌套管道。

在进程记录中,您的代码应保持几乎相同。