Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här exemplet visar hur du kör kommandon asynkront med hjälp av runspaces i en runspace-pool. Exemplet genererar en lista med kommandon och kör sedan dessa kommandon medan Windows PowerShell-motorn öppnar en runspace från poolen när den behövs.
Krav
- Det här exemplet kräver Windows PowerShell 2.0.
Demonstrerar
Det här exemplet visar följande:
- Skapa ett RunspacePool-objekt med ett minsta och högsta antal runspaces som tillåts vara öppna samtidigt.
- Skapa en lista med kommandon.
- Köra kommandona asynkront.
- Anropa metoden System.Management.Automation.Runspaces.RunspacePool.GetAvailableRunspaces* för att se hur många runspaces som är kostnadsfria.
- Samla in kommandoutdata med metoden System.Management.Automation.PowerShell.EndInvoke*.
Exempel
Det här exemplet visar hur du öppnar runspaces för en runspace-pool och hur du asynkront kör kommandon i dessa runspaces.
namespace Sample
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
/// <summary>
/// This class contains the Main entry point for the application.
/// </summary>
internal class PowerShell02
{
/// <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);
}
}
}
/// <summary>
/// Iterates through a collection printing all items.
/// </summary>
/// <param name="collection">collection to be printed</param>
private static void PrintCollection(IList collection)
{
foreach (object obj in collection)
{
Console.WriteLine("PowerShell Result: {0}", obj);
}
}
}
}