有没有办法克隆Powershell Runspace对象

时间:2016-05-20 12:50:41

标签: powershell pipeline runspace

我想知道是否可以从旧版本创建一个新的Powershell Runspace对象。

我将同时进行一些PowerShell操作。我每次都创建powershell运行空间并运行某些命令。让我们说前5个命令对于所有操作都是相同的。如果我只能为所有操作运行一次这些命令,并将运行空间的副本发送到多线程方法,那么效率会更高。

意思是,我先通过管道运行一些命令。

Runspace runspace = RunspaceFactory.CreateRunspace()
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript("$var = 5"); //those 5 initial commands
pipeline.Invoke();

现在,我想同时运行某些命令。

Parallel.For(0, 5, new ParallelOptions { }, i => concurrentOperations(runspace, i));

concurrentOperations方法已被定义为此

private static void concurrentOperations(Runspace runspace, int i)
{
        Pipeline pipeline = runspace.CreatePipeline();
        pipeline.Commands.AddScript("$newVar = $var + " + i + "; $newVar"); //newer commands which differs for each operation
        runspace.Open();
        System.Collections.ObjectModel.Collection<PSObject> result = pipeline.Invoke();
        foreach (PSObject obj in result)
        {
            Console.WriteLine("obj" + i + " : " + obj);
        }
}

现在我遇到一个例外,&#34;管道不能同时运行&#34;。

因此,如果我可以复制运行空间,那么将仅为不同的运行空间创建管道。但是,runspace中没有Clone()方法。

有什么方法可以实现这个目标吗?

0 个答案:

没有答案