Bagikan melalui


Menambahkan Set Parameter ke Cmdlet

Hal-hal yang Perlu Diketahui Tentang Set Parameter

Windows PowerShell mendefinisikan parameter yang ditetapkan sebagai sekelompok parameter yang beroperasi bersama-sama. Dengan mengelompokkan parameter cmdlet, Anda dapat membuat satu cmdlet yang dapat mengubah fungsionalitasnya berdasarkan grup parameter apa yang ditentukan pengguna.

Contoh cmdlet yang menggunakan dua set parameter untuk menentukan fungsionalitas yang berbeda adalah cmdlet Get-EventLog yang disediakan oleh Windows PowerShell. Cmdlet ini mengembalikan informasi yang berbeda saat pengguna menentukan parameter List atau LogName. Jika parameter LogName ditentukan, cmdlet mengembalikan informasi tentang peristiwa dalam log peristiwa tertentu. Jika parameter List ditentukan, cmdlet mengembalikan informasi tentang file log itu sendiri (bukan informasi peristiwa yang dikandungnya). Dalam hal ini, parameter List dan LogName mengidentifikasi dua set parameter terpisah.

Dua hal penting yang perlu diingat tentang set parameter adalah bahwa runtime Windows PowerShell hanya menggunakan satu parameter yang ditetapkan untuk input tertentu, dan bahwa setiap set parameter harus memiliki setidaknya satu parameter yang unik untuk kumpulan parameter tersebut.

Untuk mengilustrasikan poin terakhir tersebut, cmdlet Stop-Proc ini menggunakan tiga set parameter: ProcessName, ProcessId, dan InputObject. Masing-masing set parameter ini memiliki satu parameter yang tidak ada di set parameter lainnya. Set parameter dapat berbagi parameter lain, tetapi cmdlet menggunakan parameter unik ProcessName, ProcessId, dan InputObject untuk mengidentifikasi set parameter mana yang harus digunakan runtime Windows PowerShell.

Mendeklarasikan Kelas Cmdlet

Langkah pertama dalam pembuatan cmdlet adalah selalu menamai cmdlet dan mendeklarasikan kelas .NET yang mengimplementasikan cmdlet. Untuk cmdlet ini, kata kerja siklus hidup "Stop" digunakan karena cmdlet menghentikan proses sistem. Nama kata benda "Proc" digunakan karena cmdlet berfungsi pada proses. Dalam deklarasi di bawah ini, perhatikan bahwa kata kerja cmdlet dan nama kata benda tercermin dalam nama kelas cmdlet.

Nota

Untuk informasi selengkapnya tentang nama kata kerja cmdlet yang disetujui, lihat Nama Kata Kerja Cmdlet.

Kode berikut adalah definisi kelas untuk cmdlet Stop-Proc ini.

[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

Mendeklarasikan Parameter Cmdlet

Cmdlet ini mendefinisikan tiga parameter yang diperlukan sebagai input ke cmdlet (parameter ini juga menentukan set parameter), serta parameter Force yang mengelola apa yang dilakukan cmdlet dan parameter PassThru yang menentukan apakah cmdlet mengirim objek output melalui alur. Secara default, cmdlet ini tidak melewati objek melalui alur. Untuk informasi selengkapnya tentang dua parameter terakhir ini, lihat Membuat Cmdlet yang Memodifikasi Sistem.

Mendeklarasikan Parameter Nama

Parameter input ini memungkinkan pengguna untuk menentukan nama proses yang akan dihentikan. Perhatikan bahwa kata kunci atribut ParameterSetName dari atribut System.Management.Automation.ParameterAttribute menentukan parameter ProcessName yang ditetapkan untuk parameter ini.

[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

Perhatikan juga bahwa alias "ProcessName" diberikan ke parameter ini.

Mendeklarasikan Parameter Id

Parameter input ini memungkinkan pengguna menentukan pengidentifikasi proses untuk dihentikan. Perhatikan bahwa kata kunci atribut ParameterSetName dari atribut System.Management.Automation.ParameterAttribute menentukan set parameter ProcessId.

[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

Perhatikan juga bahwa alias "ProcessId" diberikan ke parameter ini.

Mendeklarasikan Parameter InputObject

Parameter input ini memungkinkan pengguna menentukan objek input yang berisi informasi tentang proses yang akan dihentikan. Perhatikan bahwa kata kunci atribut ParameterSetName dari atribut System.Management.Automation.ParameterAttribute menentukan parameter InputObject yang ditetapkan untuk parameter ini.

[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

Perhatikan juga bahwa parameter ini tidak memiliki alias.

Mendeklarasikan Parameter dalam Beberapa Set Parameter

Meskipun harus ada parameter unik untuk setiap set parameter, parameter dapat dimiliki oleh lebih dari satu set parameter. Dalam kasus ini, berikan parameter bersama System.Management.Automation.ParameterAttribute deklarasi atribut untuk setiap set tempat parameter berada. Jika parameter berada di semua set parameter, Anda hanya perlu mendeklarasikan atribut parameter sekali dan tidak perlu menentukan nama set parameter.

Mengesampingkan Metode Pemrosesan Input

Setiap cmdlet harus mengambil alih metode pemrosesan input, paling sering ini adalah metode System.Management.Automation.Cmdlet.ProcessRecord. Dalam cmdlet ini, metode System.Management.Automation.Cmdlet.ProcessRecord ditimpa sehingga cmdlet dapat memproses sejumlah proses. Ini berisi pernyataan Pilih yang memanggil metode yang berbeda berdasarkan parameter mana yang telah ditentukan pengguna.

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

Metode Pembantu yang dipanggil oleh pernyataan Pilih tidak dijelaskan di sini, tetapi Anda dapat melihat implementasinya dalam sampel kode lengkap di bagian berikutnya.

Sampel Kode

Untuk kode sampel C# lengkap, lihat sampel StopProcessSample04.

Menentukan Tipe objek dan Pemformatan

Windows PowerShell meneruskan informasi antar cmdlet menggunakan objek .NET. Akibatnya, cmdlet mungkin perlu menentukan jenisnya sendiri, atau cmdlet mungkin perlu memperluas jenis yang ada yang disediakan oleh cmdlet lain. Untuk informasi selengkapnya tentang menentukan jenis baru atau memperluas jenis yang sudah ada, lihat Memperluas Tipe Objek dan Pemformatan.

Membangun Cmdlet

Setelah menerapkan cmdlet, Anda harus mendaftarkannya dengan Windows PowerShell melalui snap-in Windows PowerShell. Untuk informasi selengkapnya tentang mendaftarkan cmdlet, lihat Cara Mendaftarkan Cmdlet, Penyedia, dan Aplikasi Host.

Menguji Cmdlet

Ketika cmdlet Anda telah terdaftar di Windows PowerShell, uji dengan menjalankannya di baris perintah. Berikut adalah beberapa pengujian yang menunjukkan bagaimana parameter ProcessId dan InputObject dapat digunakan untuk menguji set parameter mereka untuk menghentikan proses.

  • Dengan Windows PowerShell dimulai, jalankan cmdlet Stop-Proc dengan parameter ProcessId diatur untuk menghentikan proses berdasarkan pengidentifikasinya. Dalam hal ini, cmdlet menggunakan parameter ProcessId yang diatur untuk menghentikan proses.

    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
    
  • Dengan Windows PowerShell dimulai, jalankan cmdlet Stop-Proc dengan parameter InputObject diatur untuk menghentikan proses pada objek Notepad yang diambil oleh perintah Get-Process.

    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
    

Lihat Juga

Membuat Cmdlet yang Memodifikasi Sistem

Cara Membuat Cmdlet Windows PowerShell

Memperluas Tipe Objek dan Pemformatan

Cara Mendaftarkan Cmdlet, Penyedia, dan Aplikasi Host

Windows PowerShell SDK