Aracılığıyla paylaş


Cmdlet’e Parametre Kümeleri Ekleme

Parametre Kümeleri Hakkında Bilinmesi Gerekenler

Windows PowerShell, bir parametre kümesini birlikte çalışan bir parametre grubu olarak tanımlar. Bir cmdlet'in parametrelerini gruplandırarak, kullanıcının belirttiği parametre grubuna göre işlevselliğini değiştirebilen tek bir cmdlet oluşturabilirsiniz.

Farklı işlevleri tanımlamak için iki parametre kümesi kullanan bir cmdlet örneği, Windows PowerShell tarafından sağlanan Get-EventLog cmdlet'idir. Bu cmdlet, kullanıcı List veya LogName parametresini belirttiğinde farklı bilgiler döndürür. LogName parametresi belirtilirse, cmdlet belirli bir olay günlüğündeki olaylar hakkında bilgi döndürür. List parametresi belirtilirse, cmdlet günlük dosyaları hakkındaki bilgileri (içerdikleri olay bilgilerini değil) döndürür. Bu durumda, List ve LogName parametreleri iki ayrı parametre kümesini tanımlar.

Parametre kümeleri hakkında unutulmaması gereken iki önemli şey, Windows PowerShell çalışma zamanının belirli bir giriş için yalnızca bir parametre kümesi kullanması ve her parametre kümesinin bu parametre kümesi için benzersiz olan en az bir parametreye sahip olması gerektiğidir.

Bu son noktayı göstermek için bu Stop-Proc cmdlet'i üç parametre kümesi kullanır: ProcessName, ProcessIdve InputObject. Bu parametre kümelerinin her biri, diğer parametre kümelerinde olmayan bir parametreye sahiptir. Parametre kümeleri diğer parametreleri paylaşabilir, ancak cmdlet, Windows PowerShell çalışma zamanının kullanması gereken parametre kümesini belirlemek için , ProcessIdve InputObjectProcessNamebenzersiz parametreleri kullanır.

Cmdlet Sınıfını Bildirme

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çin, cmdlet sistem işlemlerini durdurduğundan "Durdur" yaşam döngüsü fiili kullanılır. cmdlet işlemler üzerinde çalıştığından "Proc" isim adı kullanılır. Aşağıdaki bildirimde, cmdlet fiilinin ve isim adının cmdlet sınıfının adına yansıtıldığını unutmayın.

Uyarı

Onaylanan cmdlet fiil adları hakkında daha fazla bilgi için bkz. Cmdlet Fiil Adları.

Aşağıdaki kod, bu Stop-Proc cmdlet'i için sınıf tanımıdır.

[Cmdlet(VerbsLifecycle.Stop, "Proc",
        DefaultParameterSetName = "ProcessId",
        SupportsShouldProcess = true)]
public class StopProcCommand : PSCmdlet
<Cmdlet(VerbsLifecycle.Stop, "Proc", DefaultParameterSetName:="ProcessId", _
SupportsShouldProcess:=True)> _
Public Class StopProcCommand
    Inherits PSCmdlet

Cmdlet'in Parametrelerini Bildirme

Bu cmdlet, cmdlet'e giriş olarak gereken üç parametreyi (bu parametreler parametre kümelerini de tanımlar) ve cmdlet'in ne yaptığını yöneten bir Force parametresi ve cmdlet'in işlem hattı üzerinden bir çıkış nesnesi gönderip göndermediğini belirleyen bir PassThru parametresi tanımlar. Varsayılan olarak, bu cmdlet bir nesneyi işlem hattından geçirmez. Bu son iki parametre hakkında daha fazla bilgi için bkz. SystemDeğiştiren Bir Cmdlet Oluşturma .

Ad Parametresini Bildirme

Bu giriş parametresi, kullanıcının durdurulacak işlemlerin adlarını belirtmesine olanak tanır. System.Management.Automation.ParameterAttribute özniteliğinin ParameterSetName öznitelik anahtar sözcüğü, bu parametre için ayarlanan ProcessName parametresini belirtir.

[Parameter(
   Position = 0,
   ParameterSetName = "ProcessName",
   Mandatory = true,
   ValueFromPipeline = true,
   ValueFromPipelineByPropertyName = true,
   HelpMessage = "The name of one or more processes to stop. Wildcards are permitted."
)]
[Alias("ProcessName")]
public string[] Name
{
    get { return processNames; }
    set { processNames = value; }
}
private string[] processNames;
<Parameter(Position:=0, ParameterSetName:="ProcessName", _
Mandatory:=True, _
ValueFromPipeline:=True, ValueFromPipelineByPropertyName:=True, _
HelpMessage:="The name of one or more processes to stop. " & _
    "Wildcards are permitted."), [Alias]("ProcessName")> _
Public Property Name() As String()
    Get
        Return processNames
    End Get
    Set(ByVal value As String())
        processNames = value
    End Set
End Property

Private processNames() As String

Bu parametreye "ProcessName" diğer adının verildiğini de unutmayın.

Kimlik Parametresini Bildirme

Bu giriş parametresi, kullanıcının durdurulacak işlemlerin tanımlayıcılarını belirtmesine olanak tanır. System.Management.Automation.ParameterAttribute özniteliğinin ParameterSetName öznitelik anahtar sözcüğü, ProcessId parametre kümesini belirtir.

[Parameter(
           ParameterSetName = "ProcessId",
           Mandatory = true,
           ValueFromPipelineByPropertyName = true,
           ValueFromPipeline = true
)]
[Alias("ProcessId")]
public int[] Id
{
  get { return processIds; }
  set { processIds = value; }
}
private int[] processIds;
<Parameter(ParameterSetName:="ProcessId", _
Mandatory:=True, _
ValueFromPipelineByPropertyName:=True, _
ValueFromPipeline:=True), [Alias]("ProcessId")> _
Public Property Id() As Integer()
    Get
        Return processIds
    End Get
    Set(ByVal value As Integer())
        processIds = value
    End Set
End Property
Private processIds() As Integer

Bu parametreye "ProcessId" diğer adının verildiğini de unutmayın.

InputObject Parametresini Bildirme

Bu giriş parametresi, kullanıcının durdurulacak işlemler hakkında bilgi içeren bir giriş nesnesi belirtmesine olanak tanır. System.Management.Automation.ParameterAttribute özniteliğinin ParameterSetName öznitelik anahtar sözcüğü, bu parametre için ayarlanan InputObject parametresini belirtir.

[Parameter(
           ParameterSetName = "InputObject",
           Mandatory = true,
           ValueFromPipeline = true)]
public Process[] InputObject
{
  get { return inputObject; }
  set { inputObject = value; }
}
private Process[] inputObject;
<Parameter(ParameterSetName:="InputObject", _
Mandatory:=True, ValueFromPipeline:=True)> _
Public Property InputObject() As Process()
    Get
        Return myInputObject
    End Get
    Set(ByVal value As Process())
        myInputObject = value
    End Set
End Property
Private myInputObject() As Process

Bu parametrenin diğer adı olmadığını da unutmayın.

Birden Çok Parametre Kümesinde Parametre Bildirme

Her parametre kümesi için benzersiz bir parametre olması gerekse de, parametreler birden fazla parametre kümesine ait olabilir. Bu gibi durumlarda, paylaşılan parametreye, parametrenin ait olduğu her küme için system.management.automation.parameterAttribute öznitelik bildirimi verin. Parametre tüm parametre kümelerindeyse, parametre özniteliğini yalnızca bir kez bildirmeniz ve parametre kümesi adını belirtmeniz gerekmez.

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

Her cmdlet'in bir giriş işleme yöntemini geçersiz kılması gerekir; çoğu zaman bu System.Management.Automation.Cmdlet.ProcessRecord yöntemi olacaktır. Bu cmdlet'te System.Management.Automation.Cmdlet.ProcessRecord yöntemi geçersiz kılınarak cmdlet'in herhangi bir sayıda işlemi işleyebilmesini sağlar. Kullanıcının belirttiği parametre kümesine göre farklı bir yöntem çağıran bir Select deyimi içerir.

protected override void ProcessRecord()
{
  switch (ParameterSetName)
  {
    case "ProcessName":
         ProcessByName();
         break;

    case "ProcessId":
         ProcessById();
         break;

    case "InputObject":
         foreach (Process process in inputObject)
         {
           SafeStopProcess(process);
         }
         break;

    default:
         throw new ArgumentException("Bad ParameterSet Name");
  } // switch (ParameterSetName...
} // ProcessRecord
Protected Overrides Sub ProcessRecord()
    Select Case ParameterSetName
        Case "ProcessName"
            ProcessByName()

        Case "ProcessId"
            ProcessById()

        Case "InputObject"
            Dim process As Process
            For Each process In myInputObject
                SafeStopProcess(process)
            Next process

        Case Else
            Throw New ArgumentException("Bad ParameterSet Name")
    End Select

End Sub 'ProcessRecord ' ProcessRecord

Select deyimi tarafından çağrılan Yardımcı yöntemleri burada açıklanmaz, ancak uygulamalarını sonraki bölümdeki tam kod örneğinde görebilirsiniz.

Kod Örneği

C# örnek kodunun tamamı için bkz. StopProcessSample04 Ö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 edin. Burada, ProcessId ve InputObject parametrelerinin bir işlemi durdurmak için parametre kümelerini test etmek için nasıl kullanılabileceğini gösteren bazı testler yer alır.

  • Windows PowerShell başlatıldığında, Stop-Proc cmdlet'ini ProcessId parametresi ayarlı olarak çalıştırarak tanımlayıcısına dayalı bir işlemi durdurun. Bu durumda, cmdlet işlemi durdurmak için ayarlanan ProcessId parametresini kullanıyor.

    PS> Stop-Proc -Id 444
    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (444)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    
  • Windows PowerShell başlatıldığında, Get-Process komutu tarafından alınan Not Defteri nesnesinde işlemleri durdurmak için InputObject parametresi ayarlanmış Stop-Proc cmdlet'ini çalıştırın.

    PS> Get-Process notepad | Stop-Proc
    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (444)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): N
    

Ayrıca Bkz.

Sistem Değiştiren Bir Cmdlet Oluşturma

Windows PowerShell Cmdlet Oluşturma

Nesne Türlerini ve Biçimlendirme Genişletmeyi

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

Windows PowerShell SDK