Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Informacje o zestawach parametrów
Program Windows PowerShell definiuje zestaw parametrów jako grupę parametrów, które działają razem. Grupując parametry polecenia cmdlet, można utworzyć pojedyncze polecenie cmdlet, które może zmienić jego funkcjonalność na podstawie grupy parametrów, które określa użytkownik.
Przykładem polecenia cmdlet używającego dwóch zestawów parametrów do zdefiniowania różnych funkcji jest Get-EventLog
polecenie cmdlet udostępniane przez program Windows PowerShell. To polecenie cmdlet zwraca różne informacje, gdy użytkownik określa parametr List
lub LogName
. Jeśli określono parametr LogName
, polecenie cmdlet zwraca informacje o zdarzeniach w danym dzienniku zdarzeń. Jeśli określono parametr List
, polecenie cmdlet zwraca informacje o plikach dziennika (a nie informacje o zdarzeniach, które zawierają). W tym przypadku parametry List
i LogName
identyfikują dwa oddzielne zestawy parametrów.
Dwie ważne kwestie, które należy pamiętać o zestawach parametrów, jest to, że środowisko uruchomieniowe programu Windows PowerShell używa tylko jednego zestawu parametrów dla określonego danych wejściowych, a każdy zestaw parametrów musi mieć co najmniej jeden parametr unikatowy dla tego zestawu parametrów.
Aby zilustrować ten ostatni punkt, to polecenie cmdlet Stop-Proc używa trzech zestawów parametrów: ProcessName
, ProcessId
i InputObject
. Każdy z tych zestawów parametrów ma jeden parametr, który nie znajduje się w innych zestawach parametrów. Zestawy parametrów mogą współdzielić inne parametry, ale polecenie cmdlet używa unikatowych parametrów ProcessName
, ProcessId
i InputObject
w celu określenia zestawu parametrów, które powinny być używane przez środowisko uruchomieniowe programu Windows PowerShell.
Deklarowanie klasy poleceń cmdlet
Pierwszym krokiem tworzenia polecenia cmdlet jest zawsze nazewnictwo polecenia cmdlet i deklarowanie klasy .NET, która implementuje polecenie cmdlet. W przypadku tego polecenia cmdlet jest używany czasownik cyklu życia "Stop", ponieważ polecenie cmdlet zatrzymuje procesy systemowe. Nazwa nounu "Proc" jest używana, ponieważ polecenie cmdlet działa w procesach. W poniższej deklaracji zwróć uwagę, że czasownik cmdlet i nazwa un są odzwierciedlane w nazwie klasy cmdlet.
Uwaga
Aby uzyskać więcej informacji na temat zatwierdzonych nazw czasowników poleceń cmdlet, zobacz Cmdlet Verb Names.
Poniższy kod to definicja klasy dla tego polecenia cmdlet Stop-Proc.
[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
Deklarowanie parametrów polecenia cmdlet
To polecenie cmdlet definiuje trzy parametry wymagane jako dane wejściowe do polecenia cmdlet (te parametry definiują również zestawy parametrów), a także Force
parametr, który zarządza tym, co robi polecenie cmdlet i PassThru
parametr, który określa, czy polecenie cmdlet wysyła obiekt wyjściowy za pośrednictwem potoku. Domyślnie to polecenie cmdlet nie przekazuje obiektu przez potok. Aby uzyskać więcej informacji na temat tych dwóch ostatnich parametrów, zobacz Creating a Cmdlet that Modifies the System.
Deklarowanie parametru name
Ten parametr wejściowy umożliwia użytkownikowi określenie nazw procesów do zatrzymania. Należy pamiętać, że atrybut ParameterSetName
słowo kluczowe System.Management.Automation.ParameterAttribute określa ProcessName
parametr ustawiony dla tego parametru.
[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
Należy również pamiętać, że alias "ProcessName" jest podawany do tego parametru.
Deklarowanie parametru id
Ten parametr wejściowy umożliwia użytkownikowi określenie identyfikatorów procesów do zatrzymania. Należy pamiętać, że atrybut ParameterSetName
słowo kluczowe System.Management.Automation.ParameterAttribute określa zestaw parametrów 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
Należy również pamiętać, że alias "ProcessId" jest podany dla tego parametru.
Deklarowanie parametru InputObject
Ten parametr wejściowy umożliwia użytkownikowi określenie obiektu wejściowego zawierającego informacje o zatrzymaniu procesów. Należy pamiętać, że atrybut ParameterSetName
słowo kluczowe System.Management.Automation.ParameterAttribute określa InputObject
parametr ustawiony dla tego parametru.
[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
Należy również pamiętać, że ten parametr nie ma aliasu.
Deklarowanie parametrów w wielu zestawach parametrów
Chociaż dla każdego zestawu parametrów musi istnieć unikatowy parametr, parametry mogą należeć do więcej niż jednego zestawu parametrów. W takich przypadkach podaj udostępniony parametr System.Management.Automation.ParameterAttribute deklaracji atrybutu dla każdego zestawu, do którego należy parametr. Jeśli parametr znajduje się we wszystkich zestawach parametrów, wystarczy zadeklarować atrybut parametru raz i nie trzeba określać nazwy zestawu parametrów.
Zastępowanie metody przetwarzania wejściowego
Każde polecenie cmdlet musi zastąpić metodę przetwarzania danych wejściowych. Najczęściej będzie to metoda System.Management.Automation.Cmdlet.ProcessRecord. W tym poleceniu cmdlet jest zastępowana metoda System.Management.Automation.Cmdlet.ProcessRecord, dzięki czemu polecenie cmdlet może przetwarzać dowolną liczbę procesów. Zawiera instrukcję Select, która wywołuje inną metodę na podstawie określonego parametru.
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
Metody pomocnika wywoływane przez instrukcję Select nie zostały opisane tutaj, ale w następnej sekcji można zobaczyć ich implementację w kompletnym przykładzie kodu.
Przykładowy kod
Aby uzyskać pełny przykładowy kod w języku C#, zobacz StopProcessSample04 Sample.
Definiowanie typów obiektów i formatowanie
Program Windows PowerShell przekazuje informacje między poleceniami cmdlet przy użyciu obiektów .NET. W związku z tym może być konieczne zdefiniowanie własnego typu polecenia cmdlet lub może być konieczne rozszerzenie istniejącego typu dostarczonego przez inne polecenie cmdlet. Aby uzyskać więcej informacji na temat definiowania nowych typów lub rozszerzania istniejących typów, zobacz Rozszerzanie typów obiektów i formatowanie.
Kompilowanie polecenia cmdlet
Po zaimplementowaniu polecenia cmdlet należy zarejestrować je w programie Windows PowerShell za pomocą przystawki programu Windows PowerShell. Aby uzyskać więcej informacji na temat rejestrowania poleceń cmdlet, zobacz Jak rejestrować polecenia cmdlet, dostawcy i aplikacje hosta.
Testowanie polecenia cmdlet
Po zarejestrowaniu polecenia cmdlet w programie Windows PowerShell przetestuj je, uruchamiając je w wierszu polecenia. Poniżej przedstawiono kilka testów, które pokazują, jak ProcessId
i InputObject
parametry mogą służyć do testowania ich zestawów parametrów w celu zatrzymania procesu.
Po uruchomieniu programu Windows PowerShell uruchom polecenie cmdlet Stop-Proc z parametrem
ProcessId
ustawionym, aby zatrzymać proces na podstawie jego identyfikatora. W takim przypadku polecenie cmdlet używa parametruProcessId
ustawionego w celu zatrzymania procesu.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
Po uruchomieniu programu Windows PowerShell uruchom polecenie cmdlet Stop-Proc z parametrem
InputObject
ustawionym na zatrzymanie procesów w obiekcie Notatnika pobranym przez polecenieGet-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
Zobacz też
tworzenie polecenia cmdlet modyfikujące systemu
Jak utworzyć polecenie cmdlet programu Windows PowerShell
rozszerzanie typów obiektów i formatowanie
Jak rejestrować polecenia cmdlet, dostawcy i aplikacje hosta
zestaw SDK programu Windows PowerShell