我尝试从另一个自定义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);
}
感谢您的帮助!
答案 0 :(得分:2)
您的问题的核心是您正在创建一个新的运行空间,它不会加载您的cmdlet。这是你应该避免的,因为它占用了大量内存,并在尝试同步两个运行空间时产生了很多问题。
诀窍是使用管道。声明一个Pipeline类型的私有字段,然后在BeginProcessing中添加:
pipeline = Runspace.DefaultRunspace.CreateNestedPipeline();
请在EndProcessing中处理嵌套管道。
在进程记录中,您的代码应保持几乎相同。