Windows PowerShell02 – minta
Ez a példa bemutatja, hogyan futtathat parancsokat aszinkron módon egy runspace-készlet runspace-felhasználásával. A minta létrehoz egy parancslistát, majd futtatja ezeket a parancsokat, amíg a Windows PowerShell motor megnyit egy futásteret a készletből, amikor szükség van rá.
Követelmények
- Ehhez a mintához Windows PowerShell 2.0 szükséges.
Útmutató ehhez:
Ez a minta a következőket mutatja be:
- RunspacePool-objektum létrehozása egy időben megnyitható runspace-objektumok minimális és maximális számával.
- Parancslista létrehozása.
- A parancsok aszinkron futtatása.
- A System.Management.Automation.Runspaces.Runspacepool.Getavailablerunspaces* metódus hívásával láthatja, hogy hány runspace ingyenes.
- A parancs kimenetének rögzítése a System.Management.Automation.Powershell.Endinvoke* metódussal.
Példa
Ez a példa bemutatja, hogyan nyithatja meg egy runspace-készlet futásterét, és hogyan futtathat aszinkron módon parancsokat a runspace-ökben.
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);
}
}
}
}
Lásd még:
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: