古いものから新しい 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()
メソッドがありません。
これを達成する方法はありますか?