Parametresiz Cmdlet Oluşturma

Bu bölümde, parametrelerin kullanımı olmadan yerel bilgisayardan bilgi alan ve ardından bilgileri işlem hattına yazan bir cmdlet'in nasıl oluşturularak ilgili bilgiler açıklandı. Burada açıklanan cmdlet, Get-Proc işlemleri hakkında bilgi alan ve ardından bu bilgileri komut satırına görüntüleyen bir cmdlet'tir.

Not

Cmdlet'ler yazarken, Windows PowerShell® başvuru derlemelerinin diske indirilir (varsayılan olarak C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 konumunda). Bunlar Genel Derleme Önbelleği'ne (GAC) yüklenmez.

Cmdlet'i adlandırma

Cmdlet adı, cmdlet'in sıyrı eylemi belirten bir fiil ve cmdlet'in üzerinde işlemde olduğu öğeleri gösteren bir isim içerir. Bu örnek Get-Proc cmdlet'i işlem nesnelerini kullandığı için System.Management.Automation.Verbscommon numaralama ile tanımlanan "Get" fiilini ve cmdlet'in işlem öğeleri üzerinde çalıştığını belirtmek için "Proc" adı kullanılır.

Cmdlet'leri adlandırıyorken şu karakterlerden birini kullanmayın: # , () {} [] & - /\ $ ; : " '<> | ? @ ` .

Bir un seçme

Belirli bir ism seçmeniz gerekir. Ürün adının kısaltılmış bir sürümüyle önekli tekil bir isim kullanmak en iyisidir. Bu türe örnek bir cmdlet adı : Get-SQLServer " ".

Fiil Seçme

Onaylanan cmdlet fiil adları kümesinden bir fiil kullan gerekir. Onaylanan cmdlet fiilleri hakkında daha fazla bilgi için bkz. Cmdlet Fiil Adları.

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

Bir cmdlet adı seçtikten sonra, cmdlet'i uygulamak için bir .NET sınıfı tanımlayın. Bu örnek cmdlet'in sınıf tanımı Get-Proc:

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

Sınıf tanımına göre, söz dizimi ile System.Management.Automation.CmdletAttribute özniteliğinin bu sınıfı cmdlet olarak tanımlamak için [Cmdlet(verb, noun, ...)] kullanılır. Bu, tüm cmdlet'ler için gereken tek özniteliktir ve Windows PowerShell çalışma zamanının bunları doğru çağırmalarına olanak sağlar. Gerekirse sınıfını daha fazla bildirecek öznitelik anahtar sözcüklerini ayarlayın. Örnek GetProcCommand sınıfımız için öznitelik bildiriminin, cmdlet'i için yalnızca isim ve fiil Get-Proc farkında kalın.

Not

Tüm Windows PowerShell sınıflarında, ayaryabilirsiniz anahtar sözcükler öznitelik sınıfının özelliklerine karşılık gelir.

cmdlet'inin sınıfını adlandırarak sınıf adına cmdlet adını yansıtmak iyi bir uygulamadır. Bunu yapmak için "FiilNounCommand" formunu kullanın ve "Fiil" ve "İsim" yerine cmdlet adı olarak kullanılan fiil ve isim yazın. Önceki sınıf tanımında gösterildiği gibi, örnek Get-Proc cmdlet'i System.Management.Automation.Cmdlet temel sınıfından türeten GetProcCommand adlı bir sınıf tanımlar.

Önemli

Windows PowerShell çalışma zamanlarına doğrudan erişen bir cmdlet tanımlamak için .NET sınıfını System.Management.Automation.PSCmdlet temel sınıfından türetebilirsiniz. Bu sınıf hakkında daha fazla bilgi için, bkz. Creating a Cmdlet that Defines Parameter Sets.

Not

Bir cmdlet'in sınıfı açıkça public olarak işaretlenir. Genel olarak işaretlenen sınıflar varsayılan olarak iç sınıftır ve varsayılan olarak Windows PowerShell tarafından bulunmayacaktır.

Windows PowerShell, cmdlet sınıfları için Microsoft.PowerShell.Commands ad alanını kullanır. Cmdlet sınıflarınızı API ad alanınıza (örneğin, xxx.PS.Commands) komutlar ad alanına yer vermek önerilir.

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

System.Management.Automation.Cmdlet sınıfı, cmdlet'inizin geçersiz k olduğu üç ana giriş işleme yöntemi sağlar. Kayıt işleme hakkında daha fazla Windows PowerShell için bkz. How Windows PowerShell Works.

Tüm giriş türleri için, Windows PowerShell çalışma zamanı System.Management.Automation.Cmdlet.BeginProcessing'i çağırarak işlemeyi etkinleştirir. Cmdlet'inizin bazı ön işlem veya kurulum işlemleri gerçekleştirmesi gerekirse, bu yöntemi geçersiz karak bunu gerçekleştirebilirsiniz.

Not

Windows PowerShell cmdlet çağrıldıken sağlanan parametre değerleri dizilerini açıklamak için "kayıt" terimini kullanır.

Cmdlet'iniz işlem hattı girişini kabul ediyorsa, System.Management.Automation.Cmdlet.ProcessRecord yöntemini ve isteğe bağlı olarak System.Management.Automation.Cmdlet.EndProcessing yöntemini geçersiz kılması gerekir. Örneğin, bir cmdlet, System.Management.Automation.Cmdlet.ProcessRecord kullanarak tüm girişleri toplar ve ardından cmdlet'in yaptığı gibi tek bir öğe yerine giriş üzerinde bir bütün olarak çalışırsa her iki yöntemi de geçersiz Sort-Object kabilirsiniz.

Cmdlet'iniz işlem hattı girişini almıyorsa System.Management.Automation.Cmdlet.EndProcessing yöntemini geçersiz kılması gerekir. Bu yöntemin, sıralama cmdlet'i için olduğu gibi, cmdlet'i aynı anda tek bir öğe üzerinde çalışamaysa da Sıklıkla System.Management.Automation.Cmdlet.BeginProcessing yerine kullanılır.

Bu örnek Get-Proc cmdlet'i işlem hattı girişini alsa da System.Management.Automation.Cmdlet.ProcessRecord yöntemini geçersiz kılar ve System.Management.Automation.Cmdlet.BeginProcessing ve System.Management.Automation.Cmdlet.EndProcessingiçin varsayılan uygulamaları kullanır. System.Management.Automation.Cmdlet.ProcessRecord geçersiz kılma işlemi alır ve System.Management.Automation.Cmdlet.WriteObject yöntemini kullanarak bunları komut satırına yazar.

protected override void ProcessRecord()
{
  // Get the current processes
  Process[] processes = Process.GetProcesses();

  // Write the processes to the pipeline making them available
  // to the next cmdlet. The second parameter of this call tells
  // PowerShell to enumerate the array, and send one process at a
  // time to the pipeline.
  WriteObject(processes, true);
}
Protected Overrides Sub ProcessRecord()

    '/ Get the current processes.
    Dim processes As Process()
    processes = Process.GetProcesses()

    '/ Write the processes to the pipeline making them available
    '/ to the next cmdlet. The second parameter of this call tells
    '/ PowerShell to enumerate the array, and send one process at a
    '/ time to the pipeline.
    WriteObject(processes, True)

End Sub 'ProcessRecord

Giriş İşleme Hakkında Anımsanacak Şeyler

Önemli

Cmdlet'ler hiçbir zaman System.Console.Writeline* veya eşdeğerini çağırmaz.

Örneğin, cmdlet ortası iptal edilirse veya cmdlet'in herhangi bir bölümünde sonlandırıcı bir hata oluşursa System.Management.Automation.Cmdlet.EndProcessing çağrılmayabiliyor. Bu nedenle, nesne temizleme gerektiren bir cmdlet, sonlandırıcı dahil olmak üzere tam System.IDisposable desenini uygulamalı, böylece çalışma zamanı işleme sonunda hem System.Management.Automation.Cmdlet.EndProcessing hem de System.IDisposable.Dispose* çağırabilir.

Kod Örneği

Tam C# örnek kodu için bkz. GetProcessSample01 Örneği.

Nesne Türlerini ve Biçimlendirmeyi Tanımlama

Windows PowerShell.NET nesnelerini kullanarak cmdlet'ler arasında bilgi iletir. 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 gerekir. Yeni türleri tanımlama veya mevcut türleri genişletme hakkında daha fazla bilgi için bkz. Nesne Türlerini Genişletme ve Biçimlendirme.

Cmdlet'i Bina

Cmdlet'i uygulayan bir Windows PowerShell ek bileşeni Windows PowerShell 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 komut satırı üzerinde çalıştırarak test etmek için. Örnek Get-Proc cmdlet'imizin kodu küçüktür, ancak yine de Windows PowerShell çalışma zamanı ve mevcut bir .NET nesnesini kullanır. Bu da onu kullanışlı hale almak için yeterlidir. Şimdi bu testi test etmek için Get-Proc ve çıktının nasıl kullanılal olduğunu daha iyi anlıyoruz. Komut satırı cmdlet'lerini kullanma hakkında daha fazla bilgi için Başlarken ile Windows PowerShell.

  1. Windows PowerShell başlatın ve bilgisayarda çalışan geçerli işlemleri elde edin.

    get-proc
    

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

    Handles  NPM(K)  PM(K)  WS(K)  VS(M)  CPU(s)  Id   ProcessName
    -------  ------  -----  -----  -----  ------  --   ----------
    254      7       7664   12048  66     173.75  1200  QCTRAY
    32       2       1372   2628   31       0.04  1860  DLG
    271      6       1216   3688   33       0.03  3816  lg
    27       2       560    1920   24       0.01  1768  TpScrex
    ...
    
  2. Daha kolay işleme için cmdlet sonuçlarına bir değişken atlayın.

    $p=get-proc
    
  3. İşlem sayısını elde.

    $p.length
    

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

    63
    
  4. Belirli bir işlemi alma.

    $p[6]
    

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

    Handles  NPM(K)  PM(K)  WS(K)  VS(M)  CPU(s)  Id    ProcessName
    -------  ------  -----  -----  -----  ------  --    -----------
    1033     3       2400   3336   35     0.53    1588  rundll32
    
  5. Bu sürecin başlangıç saati.

    $p[6].starttime
    

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

    Tuesday, July 26, 2005 9:34:15 AM
    
    $p[6].starttime.dayofyear
    
    207
    
  6. Tanıtıcı sayısı 500'den büyük olan işlemleri almak ve sonucu sıralamak.

    $p | Where-Object {$_.HandleCount -gt 500 } | Sort-Object HandleCount
    

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

    Handles  NPM(K)  PM(K)  WS(K)  VS(M)  CPU(s)  Id   ProcessName
    -------  ------  -----  -----  -----  ------  --   ----------
    568      14      2164   4972   39     5.55    824  svchost
    716       7      2080   5332   28    25.38    468  csrss
    761      21      33060  56608  440  393.56    3300 WINWORD
    791      71      7412   4540   59     3.31    492  winlogon
    ...
    
  7. Get-MemberCmdlet'ini kullanarak her işlem için kullanılabilir özellikleri listele.

    $p | Get-Member -MemberType property
    
        TypeName: System.Diagnostics.Process
    

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

    Name                     MemberType Definition
    ----                     ---------- ----------
    BasePriority             Property   System.Int32 BasePriority {get;}
    Container                Property   System.ComponentModel.IContainer Conta...
    EnableRaisingEvents      Property   System.Boolean EnableRaisingEvents {ge...
    ...
    

Ayrıca Bkz.

Komut Satırı Girişini İşlemek için Cmdlet Oluşturma

İşlem Hattı Girişini İşlemek için Cmdlet Oluşturma

Windows PowerShell Cmdlet'i Oluşturma

Nesne Türlerini ve Biçimlendirmeyi Genişletme

Windows PowerShell Nasıl Çalışır?

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

Windows PowerShell Başvurusu

Cmdlet Örnekleri