Aracılığıyla paylaş


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

Cmdlet'in giriş kaynaklarından biri komut satırıdır. Bu konuda, cmdlet'in cmdlet'ine geçirilen açık nesnelere göre yerel bilgisayardan gelen girişleri işleyebilmesi için Get-Proc cmdlet'ine (İlk Cmdlet'inizi Oluşturma )açıklanmaktadır. Burada açıklanan Get-Proc cmdlet'i, adları temelinde işlemleri alır ve ardından komut isteminde işlemler hakkındaki bilgileri görüntüler.

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

cmdlet oluşturmanın ilk adımı cmdlet adlandırma ve cmdlet'ini uygulayan .NET Framework sınıfının bildirimidir. 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ı.

Get-Proc cmdlet'i için sınıf bildirimi aşağıdadır. Bu tanım hakkındaki ayrıntılar İlk Cmdlet'inizi Oluşturma'nde sağlanır.

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

Parametreleri Bildirme

Cmdlet parametresi, kullanıcının cmdlet'e giriş sağlamasına olanak tanır. Aşağıdaki örnekte, Get-Proc ve Get-Member işlem hattı cmdlet'lerinin adlarıdır ve MemberTypeGet-Member cmdlet'i için bir parametredir. parametresi "property" bağımsız değişkenine sahiptir.

ps> Get-Proc ; Get-Member -MemberType Özelliği

Bir cmdlet'in parametrelerini bildirmek için önce parametreleri temsil eden özellikleri tanımlamanız gerekir. Get-Proc cmdlet'inde tek parametre Nameparametresidir ve bu örnekte alınacak .NET Framework işlem nesnesinin adını temsil eder. Bu nedenle, cmdlet sınıfı bir ad dizisini kabul etmek için dize türünde bir özellik tanımlar.

Get-Proc cmdlet'in Name parametresinin parametre bildirimi aşağıdadır.

/// <summary>
/// Specify the cmdlet Name parameter.
/// </summary>
  [Parameter(Position = 0)]
  [ValidateNotNullOrEmpty]
  public string[] Name
  {
    get { return processNames; }
    set { processNames = value; }
  }
  private string[] processNames;

  #endregion Parameters
<Parameter(Position:=0), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
    Get
        Return processNames
    End Get

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

End Property

Windows PowerShell çalışma zamanına bu özelliğin Name parametresi olduğunu bildirmek için, özellik tanımına bir System.Management.Automation.ParameterAttribute özniteliği eklenir. Bu özniteliği bildirmeye yönelik temel söz dizimi [Parameter()].

Uyarı

Bir parametre açıkça genel olarak işaretlenmelidir. Genel varsayılan olarak dahili olarak işaretlenmemiş ve Windows PowerShell çalışma zamanı tarafından bulunmayan parametreler.

Bu cmdlet, Name parametresi için bir dizi dize kullanır. Mümkünse, cmdlet'inizin de bir parametreyi dizi olarak tanımlaması gerekir, çünkü bu cmdlet'in birden fazla öğeyi kabul etmesine izin verir.

Parametre Tanımları Hakkında Anımsanacak Şeyler

  • Cmdlet'inizin Windows PowerShell cmdlet'leriyle uyumlu olduğundan emin olmak için önceden tanımlanmış Windows PowerShell parametre adları ve veri türleri mümkün olduğunca yeniden kullanılmalıdır. Örneğin, tüm cmdlet'ler bir kaynağı tanımlamak için önceden tanımlanmış Id parametre adını kullanırsa, kullanıcı hangi cmdlet'i kullandığından bağımsız olarak parametrenin anlamını kolayca anlayabilir. Temel olarak, parametre adları ortak dil çalışma zamanında (CLR) değişken adları için kullanılanlarla aynı kuralları izler. Parametre adlandırma hakkında daha fazla bilgi için bkz. Cmdlet Parametre Adları.

  • Windows PowerShell, tutarlı bir kullanıcı deneyimi sağlamak için birkaç parametre adını ayırır. Şu parametre adlarını kullanmayın: WhatIf, Confirm, Verbose, Debug, Warn, ErrorAction, ErrorVariable, OutVariableve OutBuffer. Ayrıca, bu parametre adları için aşağıdaki diğer adlar ayrılmıştır: vb, db, ea, ev, ovve ob.

  • Name, cmdlet'lerinizde kullanılması önerilen basit ve ortak bir parametre adıdır. Bunun gibi bir parametre adı seçmek, belirli bir cmdlet'e özgü ve anımsanacak kadar zor olan karmaşık bir addan daha iyidir.

  • Parametreler Windows PowerShell'de büyük/küçük harfe duyarlı değildir, ancak kabuk varsayılan olarak büyük/küçük harf korumasını sağlar. Bağımsız değişkenlerin büyük/küçük harf duyarlılığı, cmdlet'in çalışmasına bağlıdır. Bağımsız değişkenler, komut satırında belirtildiği gibi bir parametreye geçirilir.

  • Diğer parametre bildirimlerinin örnekleri için bkz. Cmdlet Parametreleri.

Parametreleri Konumsal veya Adlandırılmış Olarak Bildirme

Cmdlet her parametreyi konumsal veya adlandırılmış parametre olarak ayarlamalıdır. Her iki parametre türü de tek bağımsız değişkenleri, virgülle ayrılmış birden çok bağımsız değişkeni ve Boole ayarlarını kabul eder. anahtarı olarak da adlandırılan Boole parametresi yalnızca Boole ayarlarını işler. anahtar parametresinin varlığını belirlemek için kullanılır. Önerilen varsayılan değer false.

Örnek Get-Proc cmdlet'i, Name parametresini 0 konumuna sahip bir konum parametresi olarak tanımlar. Bu, kullanıcının komut satırına girdiği ilk bağımsız değişkenin bu parametre için otomatik olarak eklendiği anlamına gelir. Kullanıcının komut satırından parametre adını belirtmesi gereken adlandırılmış bir parametre tanımlamak istiyorsanız, Position anahtar sözcüğünü öznitelik bildiriminin dışında bırakın.

Uyarı

Parametrelerin adlandırılması gerekmediği sürece, kullanıcıların parametre adını yazmak zorunda kalmaması için en çok kullanılan parametreleri konumlu hale getirmenizi öneririz.

Parametreleri Zorunlu veya İsteğe Bağlı Olarak Bildirme

Cmdlet'in her parametreyi isteğe bağlı veya zorunlu bir parametre olarak ayarlaması gerekir. Örnek Get-Proc cmdlet'inde, Mandatory anahtar sözcüğü öznitelik bildiriminde ayarlanmadığından Name parametresi isteğe bağlı olarak tanımlanır.

Parametre Doğrulamayı Destekleme

Örnek Get-Proc cmdlet'i, girişin null veya boş olmadığını doğrulamayı etkinleştirmek için Name parametresine System.Management.Automation.ValidateNotNullOrEmptyAttribute bir giriş doğrulama özniteliği ekler. Bu öznitelik, Windows PowerShell tarafından sağlanan çeşitli doğrulama özniteliklerinden biridir. Diğer doğrulama özniteliklerine örnekler için bkz. Parametre Girişi doğrulama.

[Parameter(Position = 0)]
[ValidateNotNullOrEmpty]
public string[] Name

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

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

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ı için veya ad sağlanmayan işlemler için tüm işlemleri alır. System.Management.Automation.Cmdlet.ProcessRecordiçinde, System.Management.Automation.Cmdlet.WriteObject ç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ını işlem nesnelerinin çıkış dizisini listelemesi ve komut satırına tek seferde bir işlem yazması konusunda bilgilendirmek üzere 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);
    }
  }
}
Protected Overrides Sub ProcessRecord()

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

    '/ 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 Sub 'ProcessRecord

Kod Örneği

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

Nesne Türlerini ve Biçimlendirmeyi Tanımlama

Windows PowerShell, .NET Framework nesnelerini kullanarak cmdlet'ler arasında bilgi geçirir. Sonuç olarak, bir cmdlet'in kendi türünü tanımlaması veya bir 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 kullanarak 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 cmdlet'in kodunu test etmenin iki yolu aşağıda verilmiştır. Komut satırından cmdlet'leri kullanma hakkında daha fazla bilgi için bkz. windows powershell kullanmaya başlama.

  • Windows PowerShell isteminde, "IEXPLORE" adlı Internet Explorer işlemini listelemek için aşağıdaki komutu kullanın.

    Get-Proc -Name iexplore
    

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

    Handles  NPM(K)  PM(K)   WS(K)  VS(M)  CPU(s)   Id   ProcessName
    -------  ------  -----   -----  -----   ------ --   -----------
        354      11  10036   18992    85   0.67   3284   iexplore
    
  • "IEXPLORE", "OUTLOOK" ve "NOT DEFTERI" adlı Internet Explorer, Outlook ve Not Defteri işlemlerini listelemek için aşağıdaki komutu kullanın. Birden çok işlem varsa, bunların tümü görüntülenir.

    Get-Proc -Name iexplore, outlook, notepad
    

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

    Handles  NPM(K)  PM(K)   WS(K)  VS(M)  CPU(s)   Id   ProcessName
    -------  ------  -----   -----  -----  ------   --   -----------
        732      21  24696    5000    138   2.25  2288   iexplore
        715      19  20556   14116    136   1.78  3860   iexplore
       3917      62  74096   58112    468 191.56  1848   OUTLOOK
         39       2   1024    3280     30   0.09  1444   notepad
         39       2   1024     356     30   0.08  3396   notepad
    

Ayrıca Bkz.

İşlem Hattı 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