Creating multiple runspaces
If you create a large number of runspaces, you might consider creating a runspace pool. Using a System.Management.Automation.Runspaces.Runspacepool object, rather than creating a large number of individual runspaces with the same characteristics, can improve performance.
Creating and using a runspace pool.
The following example shows how to create a runspace pool and how to run a command asynchronously in a runspace of the pool.
namespace HostRunspacePool
{
using System;
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
/// <summary>
/// This class provides the Main entry point for the Host application.
/// </summary>
internal class HostRunspacePool
{
/// <summary>
/// This sample demonstrates the following.
/// 1. Creating and opening a runspace pool.
/// 2. Creating a PowerShell object.
/// 3. Adding commands and arguments to the PowerShell object.
/// 4. Running the commands asynchronously using the runspace
/// of the runspace pool.
/// </summary>
/// <param name="args">Parameter is not used.</param>
private static void Main(string[] args)
{
// Create a pool of runspaces.
using (RunspacePool rsp = RunspaceFactory.CreateRunspacePool())
{
rsp.Open();
// Create a PowerShell object to run the following command.
// get-process wmi*
PowerShell gpc = PowerShell.Create();
// Specify the runspace to use and add commands.
gpc.RunspacePool = rsp;
gpc.AddCommand("Get-Process").AddArgument("wmi*");
// Invoke the command asynchronously.
IAsyncResult gpcAsyncResult = gpc.BeginInvoke();
// Get the results of running the command.
PSDataCollection<PSObject> gpcOutput = gpc.EndInvoke(gpcAsyncResult);
// Process the output.
Console.WriteLine("The output from running the command: get-process wmi*");
for (int i= 0; i < gpcOutput.Count; i++)
{
Console.WriteLine(
"Process Name: {0} Process Id: {1}",
gpcOutput[i].Properties["ProcessName"].Value,
gpcOutput[i].Properties["Id"].Value);
}
} // End using.
} // End Main entry point.
} // End HostPs5 class.
}
See Also
Collaborer avec nous sur GitHub
La source de ce contenu se trouve sur GitHub, où vous pouvez également créer et examiner les problèmes et les demandes de tirage. Pour plus d’informations, consultez notre guide du contributeur.