ค้นหาเว็บไซต์

วิธีการเรียกใช้ Cmdlet จากภายใน Cmdlet


ตัวอย่างนี้แสดงวิธีการเรียกใช้ cmdlet ไบนารีที่ได้มาจาก [System.Management.Automation.Cmdlet] โดยตรงจากภายใน cmdlet ไบนารีอื่น ซึ่งช่วยให้คุณสามารถเพิ่มฟังก์ชันการทำงานของ cmdlet ที่ถูกเรียกใช้ไปยัง cmdlet ไบนารี คุณกำลังพัฒนา ในตัวอย่างนี้ cmdlet Get-Process ถูกเรียกใช้เพื่อรับกระบวนการที่กำลังทำงานบนคอมพิวเตอร์เฉพาะที่ การเรียกไปยัง cmdlet Get-Process จะเทียบเท่ากับคำสั่งต่อไปนี้ คำสั่งนี้เรียกกระบวนการทั้งหมดที่มีชื่อขึ้นต้นด้วยอักขระ "a" ถึง "t"

Get-Process -name [a-t]*

มันเป็นสิ่งสำคัญ

คุณสามารถเรียกใช้ได้เฉพาะ cmdlet เหล่านั้นที่ได้รับโดยตรงจากคลาส System.Management.Automation.Cmdlet คุณไม่สามารถเรียกใช้ cmdlet ที่มาจากคลาส System.Management.Automation.PSCmdlet ตัวอย่างเช่น ดูวิธีการเรียกใช้ PSCmdlet จากภายใน PSCmdlet

เพื่อเรียกใช้ cmdlet จากภายใน cmdlet

  1. ตรวจสอบให้แน่ใจว่าแอสเซมบลีที่กำหนด cmdlet ที่จะเรียกใช้มีการอ้างอิง และมีการเพิ่มคำสั่ง using ที่เหมาะสม ในตัวอย่างนี้ เนมสเปซต่อไปนี้จะถูกเพิ่ม

    using System.Diagnostics;
    using System.Management.Automation;   // PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // PowerShell cmdlets assembly you want to call.
    
  2. ในวิธีการประมวลผลอินพุตของ cmdlet ให้สร้างอินสแตนซ์ใหม่ของ cmdlet ที่จะเรียกใช้ ในตัวอย่างนี้ ออบเจ็กต์ประเภท Microsoft.PowerShell.Commands.GetProcessCommand จะถูกสร้างขึ้นพร้อมกับสตริงที่มีอาร์กิวเมนต์ที่ใช้เมื่อมีการเรียกใช้ cmdlet

    GetProcessCommand gp = new GetProcessCommand();
    gp.Name = new string[] { "[a-t]*" };
    
  3. เรียกเมธอด System.Management.Automation.Cmdlet.Invoid* เพื่อเรียกใช้ cmdlet Get-Process

      foreach (Process p in gp.Invoke<Process>())
      {
        Console.WriteLine(p.ToString());
      }
    }
    

ตัวอย่าง

ในตัวอย่างนี้ cmdlet Get-Process ถูกเรียกใช้จากภายในเมธอด System.Management.Automation.Cmdlet.BeginProcessing ของ cmdlet

using System;
using System.Diagnostics;
using System.Management.Automation;   // PowerShell assembly.
using Microsoft.PowerShell.Commands;  // PowerShell cmdlets assembly you want to call.

namespace SendGreeting
{
  // Declare the class as a cmdlet and specify an
  // appropriate verb and noun for the cmdlet name.
  [Cmdlet(VerbsCommunications.Send, "GreetingInvoke")]
  public class SendGreetingInvokeCommand : Cmdlet
  {
    // Declare the parameters for the cmdlet.
    [Parameter(Mandatory = true)]
    public string Name { get; set; }

    // Override the BeginProcessing method to invoke
    // the Get-Process cmdlet.
    protected override void BeginProcessing()
    {
      GetProcessCommand gp = new GetProcessCommand();
      gp.Name = new string[] { "[a-t]*" };
      foreach (Process p in gp.Invoke<Process>())
      {
        WriteVerbose(p.ToString());
      }
    }

    // Override the ProcessRecord method to process
    // the supplied user name and write out a
    // greeting to the user by calling the WriteObject
    // method.
    protected override void ProcessRecord()
    {
      WriteObject("Hello " + Name + "!");
    }
  }
}

ดูเพิ่มเติม

การเขียน Windows PowerShell Cmdlet

บทความที่เกี่ยวข้อง