Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
ProcessIddiatur untuk menghentikan proses berdasarkan pengidentifikasinya. Dalam hal ini, cmdlet menggunakan parameterProcessIdyang 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"): YDengan Windows PowerShell dimulai, jalankan cmdlet Stop-Proc dengan parameter
InputObjectdiatur untuk menghentikan proses pada objek Notepad yang diambil oleh perintahGet-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