Bir Cmdlet'e Parametre Kümeleri Ekleme
Parametre Setleri Hakkında Bilinmesi Gerekenler
Windows PowerShell, parametre kümesini birlikte çalışan bir parametre grubu olarak tanımlar. Bir cmdlet'in parametrelerini gruplayarak, 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 olaylarla ilgili bilgileri döndürür. List parametresi belirtilirse cmdlet, günlük dosyalarının kendisiyle ilgili bilgileri döndürür (içerdikleri olay bilgilerini değil). Bu durumda List ve LogName parametreleri iki ayrı parametre setini tanımlar.
Parametre kümeleri hakkında hatırlanması gereken iki önemli nokta, Windows PowerShell çalışma zamanının belirli bir giriş için yalnızca bir parametre kümesi kullanması ve her parametre kümesinin o 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 seti kullanır: ProcessName, ProcessId ve InputObject. Bu parametre setlerinin her biri, diğer parametre setlerinde olmayan bir parametreye sahiptir. Parametre kümeleri diğer parametreleri paylaşabilir, ancak cmdlet, hangi parametre kümesinin kullanılacağını belirlemek için İşlemAdı, İşlemKimliği ve GirişObjesi benzersiz parametrelerini kullanır. Windows PowerShell çalışma zamanı kullanılmalıdır.
Cmdlet Sınıfını Bildirme
Cmdlet oluşturmanın ilk adımı her zaman cmdlet'i adlandırmak ve cmdlet'i uygulayan .NET sınıfını bildirmektir. Bu cmdlet için yaşam döngüsü fiili "Stop" kullanılır çünkü cmdlet sistem işlemlerini durdurur. Cmdlet'in işlemler üzerinde çalışması nedeniyle "Proc" isim adı kullanılır. Aşağıdaki bildirimde cmdlet fiili ve isim adının cmdlet sınıfı adına yansıtıldığına dikkat edin.
Not
Onaylanan cmdlet fiil adları hakkında daha fazla bilgi için bkz. Cmdlet Fiil Adları.
Aşağıdaki kod, bu Stop-Proc cmdlet'inin 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 aynı zamanda parametre kümelerini de tanımlar) ve ayrıca cmdlet'in yaptıklarını yöneten bir Force parametresini ve bir PassThru'u tanımlar. cmdlet'in işlem hattı üzerinden bir çıkış nesnesi gönderip göndermeyeceğini belirleyen parametre. 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. Sistemi Değiştiren Bir Cmdlet Oluşturma.
Ad Parametresinin Bildirilmesi
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üğünün, bu parametre için ProcessName parametre kümesini belirttiğini unutmayın.
[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
Ayrıca bu parametreye "İşlemAdı" takma adının verildiğini unutmayın.
Id Parametresinin Bildirilmesi
Bu giriş parametresi, kullanıcının durdurulacak süreçlerin tanımlayıcılarını belirlemesine olanak tanır. System.Management.Automation.Parameterattribute özniteliğinin ParameterSetName öznitelik anahtar sözcüğünün ProcessId parametre kümesini belirttiğini unutmayın.
[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
Ayrıca bu parametreye "ProcessId" takma adının verildiğini unutmayın.
GirişObject Parametresinin Bildirilmesi
Bu giriş parametresi, kullanıcının durdurulacak işlemler hakkında bilgi içeren bir giriş nesnesi belirlemesine olanak tanır. System.Management.Automation.Parameterattribute özniteliğinin ParameterSetName öznitelik anahtar sözcüğünün, bu parametre için InputObject parametre kümesini belirttiğini unutmayın.
[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
Ayrıca bu parametrenin takma adı olmadığını da unutmayın.
Çoklu Parametre Setlerinde Parametrelerin Bildirilmesi
Her parametre setinin kendine özgü bir parametresi olması gerekse de parametreler birden fazla parametre setine ait olabilir. Bu durumlarda, parametrenin ait olduğu her küme için paylaşılan parametreye System.Management.Automation.Parameterattribute öznitelik bildirimi verin. Bir parametre tüm parametre setlerinde yer alıyorsa, parametre niteliğini yalnızca bir kez bildirmeniz gerekir ve parametre seti 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ınır, böylece cmdlet herhangi bir sayıda işlemi işleyebilir. Kullanıcının belirttiği parametre setine bağlı olarak farklı bir yöntemi çağıran bir Select ifadesi 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öntemler burada açıklanmamıştır ancak bunların uygulanmasını bir sonraki bölümdeki tam kod örneğinde görebilirsiniz.
Kod Örneği
C# örnek kodunun tamamı için bkz. StopProcessSample04 Örneği.
Nesne Türlerini Tanımlama ve Biçimlendirme
Windows PowerShell, .NET nesnelerini kullanarak cmdlet'ler arasında bilgi aktarır. Sonuç olarak, bir cmdlet'in kendi türünü tanımlaması gerekebilir veya cmdlet'in başka bir cmdlet tarafından sağlanan mevcut bir türü genişletmesi gerekebilir. 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 oluşturma
Bir cmdlet'i uyguladıktan sonra bunu 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 Ana Bilgisayar Uygulamalarını Kaydetme.
Cmdlet'i test etme
Cmdlet'iniz Windows PowerShell'e kaydedildiğinde, komut satırında çalıştırarak test edin. Aşağıda, ProcessId ve InputObject parametrelerinin, bir işlemi durdurmak amacıyla parametre kümelerini test etmek için nasıl kullanılabileceğini gösteren bazı testler verilmiştir.
Windows PowerShell başlatıldığında, bir işlemi tanımlayıcısına göre durdurmak için Stop-Proc cmdlet'ini
ProcessIdparametre seti ile çalıştırın. Bu durumda cmdlet, işlemi durdurmak içinProcessIdparametre kümesini 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"): YWindows PowerShell başlatıldığında,
Get-Processkomutu tarafından alınan Not Defteri nesnesindeki işlemleri durdurmak içinInputObjectparametre seti ile 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 Bakınız
Sistemi Değiştiren Bir Cmdlet Oluşturma
Windows PowerShell Cmdlet'i Nasıl Oluşturulur
Nesne Türlerini ve Biçimlendirmeyi Genişletme
Cmdlet'leri, Sağlayıcıları ve Ana Bilgisayar Uygulamalarını Kaydetme
Windows PowerShell SDK'sı