2

古いものから新しい Powershell 実行空間オブジェクトを作成できるかどうかを知りたいです。

いくつかの PowerShell 操作を同時に実行します。毎回 powershell 実行空間を作成し、特定のコマンドを実行します。最初の 5 つのコマンドがすべての操作で同じであるとしましょう。これらのコマンドをすべての操作に対して 1 回だけ実行し、実行空間のコピーをマルチスレッド メソッドに送信できれば、より効率的です。

つまり、最初にパイプラインを介していくつかのコマンドを実行します。

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);
        }
}

そして、「パイプラインを同時に実行することはできません」という例外が発生しました。

そのため、実行空間のコピーを作成できれば、異なる実行空間に対してのみパイプラインが作成されます。しかし、実行空間にはClone()メソッドがありません。

これを達成する方法はありますか?

4

0 に答える 0