Tìm kiếm trang web

Mẫu Windows PowerShell02


Mẫu này cho thấy cách chạy các lệnh không đồng bộ bằng cách sử dụng các vùng chạy của nhóm vùng chạy. Mẫu tạo danh sách các lệnh rồi chạy các lệnh đó trong khi công cụ Windows PowerShell mở một vùng chạy từ nhóm khi cần thiết.

Yêu cầu

  • Mẫu này yêu cầu Windows PowerShell 2.0.

chứng minh

Mẫu này thể hiện những điều sau:

  • Tạo một đối tượng RunspacePool với số lượng không gian chạy tối thiểu và tối đa được phép mở cùng một lúc.
  • Tạo danh sách lệnh.
  • Chạy các lệnh không đồng bộ.
  • Gọi phương thức System.management.Automation.Runspaces.Runspacepool.Getavailablerunspaces* để xem có bao nhiêu runspace trống.
  • Ghi lại đầu ra lệnh bằng phương thức System.management.Automation.Powershell.Endinvoke*.

Ví dụ

Mẫu này cho thấy cách mở các vùng chạy của một nhóm vùng chạy và cách chạy các lệnh không đồng bộ trong các vùng chạy đó.

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);
      }
    }
  }
}

Xem thêm

Viết ứng dụng máy chủ Windows PowerShell

Bài viết liên quan