Bagikan melalui


Cara Memanggil Cmdlet dari Dalam Cmdlet

Contoh ini menunjukkan cara memanggil cmdlet biner yang berasal dari [System.Management.Automation.Cmdlet] langsung dari dalam cmdlet biner lain, yang memungkinkan Anda menambahkan fungsionalitas cmdlet yang dipanggil ke cmdlet biner yang Anda kembangkan. Dalam contoh ini, cmdlet Get-Process dipanggil untuk mendapatkan proses yang berjalan di komputer lokal. Panggilan ke cmdlet Get-Process setara dengan perintah berikut. Perintah ini mengambil semua proses yang namanya dimulai dengan karakter "a" hingga "t".

Get-Process -Name [a-t]*

Penting

Anda hanya dapat memanggil cmdlet yang berasal langsung dari kelas System.Management.Automation.Cmdlet. Anda tidak dapat memanggil cmdlet yang berasal dari kelas System.Management.Automation.PSCmdlet. Misalnya, lihat Cara memanggil PSCmdlet dari dalam PSCmdlet.

Untuk memanggil cmdlet dari dalam cmdlet

  1. Pastikan bahwa rakitan yang menentukan cmdlet yang akan dipanggil direferensikan dan bahwa pernyataan using yang sesuai ditambahkan. Dalam contoh ini, namespace berikut ditambahkan.

    using System.Diagnostics;
    using System.Management.Automation;   // PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // PowerShell cmdlets assembly you want to call.
    
  2. Dalam metode pemrosesan input cmdlet, buat instans baru cmdlet yang akan dipanggil. Dalam contoh ini, objek jenis Microsoft.PowerShell.Commands.GetProcessCommand dibuat bersama dengan string yang berisi argumen yang digunakan saat cmdlet dipanggil.

    GetProcessCommand gp = new GetProcessCommand();
    gp.Name = new string[] { "[a-t]*" };
    
  3. Panggil metode System.Management.Automation.Cmdlet.Invoke* untuk memanggil cmdlet Get-Process.

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

Contoh

Dalam contoh ini, cmdlet Get-Process dipanggil dari dalam metode 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 + "!");
    }
  }
}

Lihat Juga

Menulis Cmdlet Windows PowerShell