Aracılığıyla paylaş


Komut Zinciri Girişini İşleyen Parametreler Ekleme

Bir cmdlet için giriş kaynağı, işlem hattındaki yukarı akış cmdlet'inden kaynaklanan bir nesnedir. Bu bölümde, cmdlet'in işlem hattı nesnelerini işleyebilmesi için Get-Proc cmdlet'ine (İlk Cmdlet'inizi Oluşturma) nasıl parametre ekleneceği açıklanır.

Bu Get-Proc cmdlet' i bir işlem hattı nesnesinden girişi kabul eden, sağlanan adlara göre yerel bilgisayardan işlem bilgilerini alan ve ardından komut satırında işlemler hakkındaki bilgileri görüntüleyen bir Name parametresi kullanır.

Cmdlet Sınıfını Tanımlama

Cmdlet oluşturmanın ilk adımı her zaman cmdlet'ini adlandırmak ve cmdlet'i uygulayan .NET sınıfını bildirmektir. Bu cmdlet işlem bilgilerini alır, dolayısıyla burada seçilen fiil adı "Get" olur. (Bilgi alma yeteneğine sahip hemen her tür cmdlet komut satırı girişini işleyebilir.) Onaylanan cmdlet fiilleri hakkında daha fazla bilgi için bkz. Cmdlet Fiil Adları.

Bu Get-Proc cmdlet'inin tanımı aşağıdadır. Bu tanımın ayrıntıları İlk Cmdlet'inizi Oluşturmaiçinde verilmiştir.

[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand : Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
    Inherits Cmdlet

İşlem Hattından Giriş Tanımlama

Bu bölümde, bir cmdlet için işlem hattından girişin nasıl tanımlanacağı açıklanmaktadır. Bu Get-Proc cmdlet'i, komut satırı girişini İşleyen Parametreler Eklemeaçıklandığı gibi Name parametresini temsil eden bir özellik tanımlar. (Parametreleri bildirme hakkında genel bilgi için bu konuya bakın.)

Ancak, bir cmdlet'in işlem hattı girişini işlemesi gerektiğinde, parametrelerinin Windows PowerShell çalışma zamanı tarafından giriş değerlerine bağlı olması gerekir. Bunu yapmak için ValueFromPipeline anahtar sözcüğünü eklemeniz veya ValueFromPipelineByProperty anahtar sözcüğünü System.Management.Automation.ParameterAttribute öznitelik bildirimine eklemeniz gerekir. Cmdlet tam giriş nesnesine erişiyorsa ValueFromPipeline anahtar sözcüğünü belirtin. cmdlet'i nesnenin yalnızca bir özelliğine erişiyorsa ValueFromPipelineByProperty belirtin.

İşlem hattı girişini kabul eden bu Get-Proc cmdlet'in Name parametresi için parametre bildirimi aşağıdadır.

[Parameter(
   Position = 0,
   ValueFromPipeline = true,
   ValueFromPipelineByPropertyName = true)]
[ValidateNotNullOrEmpty]
public string[] Name
{
   get { return this.processNames; }
   set { this.processNames = value; }
}
<Parameter(Position:=0, ValueFromPipeline:=True, _
ValueFromPipelineByPropertyName:=True), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
    Get
        Return processNames
    End Get

    Set(ByVal value As String())
        processNames = value
    End Set

End Property

Önceki bildirim, ValueFromPipeline anahtar sözcüğünü true olarak ayarlar; böylece, nesne parametreyle aynı türdeyse veya aynı türe zorlanabilirse Windows PowerShell çalışma zamanı parametreyi gelen nesneye bağlar. ValueFromPipelineByPropertyName anahtar sözcüğü de true olarak ayarlanır, böylece Windows PowerShell çalışma zamanı Name özelliği için gelen nesneyi denetler. Gelen nesnenin böyle bir özelliği varsa, çalışma zamanı Name parametresini gelen nesnenin Name özelliğine bağlar.

Uyarı

Bir parametre için ValueFromPipeline öznitelik anahtar sözcüğü ayarı, ValueFromPipelineByPropertyName anahtar sözcüğü ayarından önceliklidir.

Giriş İşleme Yöntemini Geçersiz Kılma

Cmdlet'iniz işlem hattı girişini işleyecekse, uygun giriş işleme yöntemlerini geçersiz kılması gerekir. Temel giriş işleme yöntemleri, İlk Cmdlet'inizi Oluşturma'nde tanıtılır.

Bu Get-Proc cmdlet'i, kullanıcı veya betik tarafından sağlanan Name parametre girişini işlemek için System.Management.Automation.Cmdlet.ProcessRecord yöntemini geçersiz kılar. Bu yöntem, istenen her işlem adı veya ad sağlanmazsa tüm işlemler için işlemleri alır. System.Management.Automation.Cmdlet.ProcessRecordiçinde, WriteObject(System.Object,System.Boolean) çağrısının, çıkış nesnelerini işlem hattına göndermek için çıkış mekanizması olduğuna dikkat edin. Bu çağrının ikinci parametresi olan enumerateCollection, Windows PowerShell çalışma zamanına işlem nesneleri dizisini listelemesini ve komut satırına tek seferde bir işlem yazmasını bildirmek için true olarak ayarlanır.

protected override void ProcessRecord()
{
  // If no process names are passed to the cmdlet, get all processes.
  if (processNames == null)
  {
      // Write the processes to the pipeline making them available
      // to the next cmdlet. The second argument of this call tells
      // PowerShell to enumerate the array, and send one process at a
      // time to the pipeline.
      WriteObject(Process.GetProcesses(), true);
  }
  else
  {
    // If process names are passed to the cmdlet, get and write
    // the associated processes.
    foreach (string name in processNames)
    {
      WriteObject(Process.GetProcessesByName(name), true);
    } // End foreach (string name...).
  }
}
Protected Overrides Sub ProcessRecord()
    Dim processes As Process()

    '/ If no process names are passed to the cmdlet, get all processes.
    If processNames Is Nothing Then
        processes = Process.GetProcesses()
    Else

        '/ If process names are specified, write the processes to the
        '/ pipeline to display them or make them available to the next cmdlet.
        For Each name As String In processNames
            '/ The second parameter of this call tells PowerShell to enumerate the
            '/ array, and send one process at a time to the pipeline.
            WriteObject(Process.GetProcessesByName(name), True)
        Next
    End If

End Sub 'ProcessRecord

Kod Örneği

C# örnek kodunun tamamı için bkz. getProcessSample03 Örnek .

Nesne Türlerini ve Biçimlendirmeyi Tanımlama

Windows PowerShell, .NET nesnelerini kullanarak cmdlet'ler arasında bilgi geçirir. Sonuç olarak, bir cmdlet'in kendi türünü tanımlaması veya cmdlet'in başka bir cmdlet tarafından sağlanan mevcut bir türü genişletmesi gerekebilir. Yeni türleri tanımlama veya var olan türleri genişletme hakkında daha fazla bilgi için bkz. Nesne Türlerini Genişletme ve Biçimlendirme.

Cmdlet'i oluşturma

Bir cmdlet uygulandıktan sonra bir Windows PowerShell ek bileşeni aracılığıyla Windows PowerShell'e kaydedilmesi gerekir. Cmdlet'leri kaydetme hakkında daha fazla bilgi için bkz. Cmdlet'leri, Sağlayıcıları ve Konak Uygulamalarını Kaydetme.

Cmdlet'i test etme

Cmdlet'iniz Windows PowerShell'e kaydedildiğinde, komut satırında çalıştırarak bunu test edin. Örneğin, örnek cmdlet'inin kodunu test edin. Komut satırından cmdlet'leri kullanma hakkında daha fazla bilgi için bkz. Windows PowerShell ile Çalışmaya Başlama .

  • Windows PowerShell isteminde işlem hattı aracılığıyla işlem adlarını almak için aşağıdaki komutları girin.

    PS> type ProcessNames | Get-Proc
    

    Aşağıdaki çıkış görüntülenir.

    Handles  NPM(K)  PM(K)   WS(K)  VS(M)  CPU(s)    Id  ProcessName
    -------  ------  -----   ----- -----   ------    --  -----------
        809      21  40856    4448    147    9.50  2288  iexplore
        737      21  26036   16348    144   22.03  3860  iexplore
         39       2   1024     388     30    0.08  3396  notepad
       3927      62  71836   26984    467  195.19  1848  OUTLOOK
    
  • "IEXPLORE" adlı işlemlerden Name özelliğine sahip işlem nesnelerini almak için aşağıdaki satırları girin. Bu örnek, "IEXPLORE" işlemlerini almak için yukarı akış komutu olarak Get-Process cmdlet'ini (Windows PowerShell tarafından sağlanır) kullanır.

    PS> Get-Process iexplore | Get-Proc
    

    Aşağıdaki çıkış görüntülenir.

    Handles  NPM(K)  PM(K)   WS(K)  VS(M)  CPU(s)    Id  ProcessName
    -------  ------  -----   ----- -----   ------    --  -----------
        801      21  40720    6544    142    9.52  2288  iexplore
        726      21  25872   16652    138   22.09  3860  iexplore
        801      21  40720    6544    142    9.52  2288  iexplore
        726      21  25872   16652    138   22.09  3860  iexplore
    

Ayrıca Bkz.

Komut Satırı Girişini İşleyen Parametreler Ekleme

İlk Cmdlet'inizi Oluşturma

Nesne Türlerini ve Biçimlendirme Genişletmeyi

Cmdlet'leri, Sağlayıcıları ve Konak Uygulamalarını Kaydetme

Windows PowerShell Başvurusu

Cmdlet Örnekleri