/// <summary> /// Runs many commands with the help of a RunspacePool. /// </summary> /// <param name="args">This parameter is unused.</param> private static void Main(string[] args) { // Creating and opening runspace pool. Use a minimum of 1 runspace and a maximum of // 5 runspaces can be opened at the same time. RunspacePool runspacePool = RunspaceFactory.CreateRunspacePool(1, 5); runspacePool.Open(); using (runspacePool) { // Define the commands to be run. List <PowerShell> powerShellCommands = new List <PowerShell>(); // The command results. List <IAsyncResult> powerShellCommandResults = new List <IAsyncResult>(); // The maximum number of runspaces that can be opened at one time is // 5, but we can queue up many more commands that will use the // runspace pool. for (int i = 0; i < 100; i++) { // Using a PowerShell object, run the commands. PowerShell powershell = PowerShell.Create(); // Instead of setting the Runspace property of powershell, // the RunspacePool property is used. That is the only difference // between running commands with a runspace and running commands // with a runspace pool. powershell.RunspacePool = runspacePool; // The script to be run outputs a sequence number and the number of available runspaces // in the pool. string script = String.Format( "write-output ' Command: {0}, Available Runspaces: {1}'", i, runspacePool.GetAvailableRunspaces()); // The three lines below look the same running with a runspace or // with a runspace pool. powershell.AddScript(script); powerShellCommands.Add(powershell); powerShellCommandResults.Add(powershell.BeginInvoke()); } // Collect the results. for (int i = 0; i < 100; i++) { // EndInvoke will wait for each command to finish, so we will be getting the commands // in the same 0 to 99 order that they have been invoked withy BeginInvoke. PSDataCollection <PSObject> results = powerShellCommands[i].EndInvoke(powerShellCommandResults[i]); // Print all the results. One PSObject with a plain string is the expected result. PowerShell02.PrintCollection(results); } } }