Aracılığıyla paylaş


Cmdlet İçinden Cmdlet Çağırma

Bu örnek, [System.Management.Automation.Cmdlet] doğrudan başka bir ikili cmdlet'in içinden türetilen bir ikili cmdlet'in nasıl çağrıldığını gösterir. Bu, çağrılan cmdlet'in işlevselliğini geliştirmekte olduğunuz ikili cmdlet'e eklemenize olanak tanır. Bu örnekte, yerel bilgisayarda çalışan işlemleri almak için Get-Process cmdlet'i çağrılır. Get-Process cmdlet'ine yapılan çağrı aşağıdaki komutla eşdeğerdir. Bu komut, adları "a" ile "t" arasında başlayan tüm işlemleri alır.

Get-Process -Name [a-t]*

Önemli

Yalnızca doğrudan System.Management.Automation.Cmdlet sınıfından türetilen cmdlet'leri çağırabilirsiniz. System.Management.Automation.PSCmdlet sınıfından türetilen bir cmdlet'i çağıramazsınız. Örnek için bkz. PSCmdlet'in içinden PSCmdlet'i çağırma.

Cmdlet'in içinden bir cmdlet çağırmak için

  1. Çağrılacak cmdlet'i tanımlayan derlemeye başvurulmasını ve uygun using deyiminin eklendiğinden emin olun. Bu örnekte, aşağıdaki ad alanları eklenir.

    using System.Diagnostics;
    using System.Management.Automation;   // PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // PowerShell cmdlets assembly you want to call.
    
  2. cmdlet'in giriş işleme yönteminde çağrılacak cmdlet'in yeni bir örneğini oluşturun. Bu örnekte, Microsoft.PowerShell.Commands.GetProcessCommand türünde bir nesne, cmdlet çağrıldığında kullanılan bağımsız değişkenleri içeren dizeyle birlikte oluşturulur.

    GetProcessCommand gp = new GetProcessCommand();
    gp.Name = new string[] { "[a-t]*" };
    
  3. Get-Process cmdlet'ini çağırmak için System.Management.Automation.Cmdlet.Invoke* yöntemini çağırın.

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

Örnek

Bu örnekte, Get-Process cmdlet'i bir cmdlet'in System.Management.Automation.Cmdlet.BeginProcessing yönteminden çağrılır.

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 + "!");
    }
  }
}

Ayrıca Bkz.

Windows PowerShell Cmdlet'i yazma