วิธีการเรียกใช้ 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
ตรวจสอบให้แน่ใจว่าแอสเซมบลีที่กำหนด cmdlet ที่จะเรียกใช้มีการอ้างอิง และมีการเพิ่มคำสั่ง
usingที่เหมาะสม ในตัวอย่างนี้ เนมสเปซต่อไปนี้จะถูกเพิ่มusing System.Diagnostics; using System.Management.Automation; // PowerShell assembly. using Microsoft.PowerShell.Commands; // PowerShell cmdlets assembly you want to call.ในวิธีการประมวลผลอินพุตของ cmdlet ให้สร้างอินสแตนซ์ใหม่ของ cmdlet ที่จะเรียกใช้ ในตัวอย่างนี้ ออบเจ็กต์ประเภท Microsoft.PowerShell.Commands.GetProcessCommand จะถูกสร้างขึ้นพร้อมกับสตริงที่มีอาร์กิวเมนต์ที่ใช้เมื่อมีการเรียกใช้ cmdlet
GetProcessCommand gp = new GetProcessCommand(); gp.Name = new string[] { "[a-t]*" };-
เรียกเมธอด System.Management.Automation.Cmdlet.Invoid* เพื่อเรียกใช้ cmdlet
Get-Processforeach (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