Aracılığıyla paylaş


Parametresiz Cmdlet Oluşturma

Bu bölümde, parametreleri kullanmadan yerel bilgisayardan bilgi alan ve ardından bilgileri işlem hattına yazan bir cmdlet'in nasıl oluşturulacağı açıklanır. Burada açıklanan cmdlet, yerel bilgisayarın işlemleri hakkında bilgi alan ve ardından bu bilgileri komut satırında görüntüleyen bir Get-Proc cmdlet'idir.

Uyarı

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

Cmdlet'i adlandırma

Cmdlet adı, cmdlet'in aldığı eylemi gösteren bir fiilden ve cmdlet'in üzerinde işlem yaptığı öğeleri belirten bir isimden oluşur. Bu örnek Get-Proc cmdlet'i işlem nesnelerini aldığından, System.Management.Automation.VerbsCommon numaralandırması tarafından tanımlanan "Get" fiilini ve cmdlet'in işlem öğeleri üzerinde çalıştığını belirtmek için "Proc" adlı adı kullanır.

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

İsim Seçme

Belirli bir isim seçmelisiniz. Ü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" şeklindedir.

Fiil Seçme

Onaylanan cmdlet fiil adları kümesinden bir fiil kullanmalısınız. 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'ini uygulamak için bir .NET sınıfı tanımlayın. Bu örnek Get-Proc cmdlet'i için sınıf tanımı aşağıda verilmiştir:

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

Sınıf tanımından önceki System.Management.Automation.CmdletAttribute özniteliğinin söz dizimi [Cmdlet(verb, noun, ...)]olan bu sınıfı bir cmdlet olarak tanımlamak için kullanıldığına dikkat edin. Bu, tüm cmdlet'ler için gerekli olan tek özniteliktir ve Windows PowerShell çalışma zamanının bunları doğru şekilde çağırmasına izin verir. Gerekirse sınıfı daha fazla bildirmek için öznitelik anahtar sözcükleri ayarlayabilirsiniz. Örnek GetProcCommand sınıfımız için öznitelik bildiriminin, Get-Proc cmdlet'i için yalnızca isim ve fiil adlarını bildirdiğini unutmayın.

Uyarı

Tüm Windows PowerShell öznitelik sınıfları için, ayarlayabileceğiniz anahtar sözcükler öznitelik sınıfının özelliklerine karşılık gelir.

cmdlet'in sınıfını adlandırırken, sınıf adındaki cmdlet adını yansıtmak iyi bir uygulamadır. Bunu yapmak için "VerbNounCommand" formunu kullanın ve "Fiil" ve "İsim" sözcüklerini cmdlet adında kullanılan fiil ve isim ile değiştirin. Ö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üretilen GetProcCommand adlı bir sınıf tanımlar.

Önemli

Windows PowerShell çalışma zamanına doğrudan erişen bir cmdlet tanımlamak istiyorsanız, .NET sınıfınız System.Management.Automation.PSCmdlet temel sınıfından türetilmelidir. Bu sınıf hakkında daha fazla bilgi için bkz. Parametre Kümelerini Tanımlayan Bir Cmdlet Oluşturma.

Uyarı

Bir cmdlet sınıfı açıkça genel olarak işaretlenmelidir. Genel olarak işaretlenmemiş sınıflar varsayılan olarak iç olarak işaretlenir ve Windows PowerShell çalışma zamanı tarafından bulunamaz.

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ızın Komutlar ad alanına(örneğin, xxx.PS) yerleştirmeniz önerilir. Komut.

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

System.Management.Automation.Cmdlet sınıfı, cmdlet'inizin geçersiz kıldığı üç ana giriş işleme yöntemi sağlar. Windows PowerShell'in kayıtları nasıl işlediği hakkında daha fazla bilgi için bkz. Windows PowerShell Nasıl Çalışır .

Tüm giriş türleri için Windows PowerShell çalışma zamanı, işlemeyi etkinleştirmek için System.Management.Automation.Cmdlet.BeginProcessing çağırır. Cmdlet'inizin bazı ön işleme veya kurulum gerçekleştirmesi gerekiyorsa, bu yöntemi geçersiz kılarak bunu yapabilir.

Uyarı

Windows PowerShell, bir cmdlet çağrıldığında sağlanan parametre değerleri kümesini açıklamak için "record" terimini kullanır.

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

Cmdlet'iniz işlem hattı girişi almazsa, System.Management.Automation.Cmdlet.EndProcessing yöntemini geçersiz kılmalıdır. Bu yöntemin, bir sıralama cmdlet'i için olduğu gibi cmdlet'i aynı anda bir öğe üzerinde çalışamadığında system.management.Automation.Cmdlet.BeginProcessing yerine sıklıkla kullanıldığını unutmayın.

Bu örnek Get-Proc cmdlet'i işlem hattı girişi alması gerektiğinden, 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

  • Giriş için varsayılan kaynak, komut satırında kullanıcı tarafından sağlanan açık bir nesnedir (örneğin, bir dize). Daha fazla bilgi için bkz. komut satırı girişini işlemek için cmdlet oluşturma .

  • Giriş işleme yöntemi, işlem hattındaki bir yukarı akış cmdlet'inin çıkış nesnesinden de giriş alabilir. Daha fazla bilgi için bkz. İşlem Hattı Girişini İşlemek için Cmdlet Oluşturma. Cmdlet'inizin komut satırı ve işlem hattı kaynaklarının birleşiminden giriş alabildiğini unutmayın.

  • Aşağı akış cmdlet'i uzun süre geri dönemeyebilir veya hiç dönmeyebilir. Bu nedenle, cmdlet'inizdeki giriş işleme yöntemi, System.Management.Automation.Cmdlet.WriteObjectçağrıları sırasında kilitleri tutmamalıdır; özellikle kapsamın cmdlet örneğinin ötesine genişletildiği kilitler.

Önemli

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

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

Kod Örneği

C# örnek kodunun tamamı için bkz. GetProcessSample01 Ö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

Cmdlet'i uyguladıktan sonra, bir Windows PowerShell ek bileşeni aracılığıyla Windows PowerShell'e kaydetmeniz 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 edebilirsiniz. Örnek Get-Proc cmdlet'imizin kodu küçüktür, ancak yine de Windows PowerShell çalışma zamanını ve mevcut bir .NET nesnesini kullanır ve bu da onu yararlı hale getirmek için yeterlidir. Şimdi Get-Proc neler yapabileceğini ve çıkışın nasıl kullanılabileceğini daha iyi anlamak için test edelim. Komut satırından cmdlet'leri kullanma hakkında daha fazla bilgi için bkz. Windows PowerShell ile Çalışmaya Başlama .

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

    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 atayın.

    $p=Get-Proc
    
  3. İşlem sayısını alın.

    $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 işlemin başlangıç saatini alın.

    $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ının 500'den büyük olduğu işlemleri alın ve sonucu sıralayın.

    $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. Her işlem için kullanılabilir özellikleri listelemek için Get-Member cmdlet'ini kullanın.

    $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şi işlemek için cmdlet oluşturma

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

Windows PowerShell Cmdlet Oluşturma

Nesne Türlerini ve Biçimlendirme Genişletmeyi

Windows PowerShell'in Nasıl Çalıştığını

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

Windows PowerShell Başvurusu

Cmdlet Örnekleri