Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法克隆Powershell运行空间对象_Powershell_Pipeline_Runspace - Fatal编程技术网

有没有办法克隆Powershell运行空间对象

有没有办法克隆Powershell运行空间对象,powershell,pipeline,runspace,Powershell,Pipeline,Runspace,我想知道是否可以从旧的Powershell运行空间对象创建新的Powershell运行空间对象 我将同时执行一些powershell操作。我每次都创建powershell运行空间并运行某些命令。假设前5个命令对于所有操作都是相同的。如果我可以对所有操作只运行这些命令一次,并将运行空间的副本发送给多线程方法,那么效率会更高 意思是,我先通过管道运行一些命令 Runspace runspace = RunspaceFactory.CreateRunspace() runspace.Open(); P

我想知道是否可以从旧的Powershell运行空间对象创建新的Powershell运行空间对象

我将同时执行一些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);
        }
}
私有静态void concurrentOperations(运行空间运行空间,int i)
{
Pipeline Pipeline=runspace.CreatePipeline();
pipeline.Commands.AddScript(“$newVar=$var+”+i+“;$newVar”);//更新的命令,每个操作都不同
Open();
System.Collections.ObjectModel.Collection结果=pipeline.Invoke();
foreach(结果中的PSObject对象)
{
Console.WriteLine(“obj”+i+:“+obj”);
}
}
现在我遇到了一个例外,“管道不能同时运行”

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


有什么办法可以做到这一点吗?

不要
Clone()
runspaces,启动一个替代程序据我分析,在
RunspacePool
中,有一些选项可以创建新的运行空间,我必须运行每个运行空间中的所有命令。我希望一组初始命令只能对所有操作运行一次。您可以修改
RunspacePool
InitialSessionState
,以反映前5个命令带来的更改,因此,当您开始调用codeI时,池中的所有运行空间都具有相同的修改状态。在
InitialSessionState.commands
中添加命令。但后来我知道,用户定义的cmdlet可以添加到现有的cmdlet中。如何在使用
InitialSessionState
RunspacePool
创建运行空间时运行命令?