Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Co je potřeba vědět o sadách parametrů
Windows PowerShell definuje sadu parametrů jako skupinu parametrů, které spolupracují. Seskupením parametrů rutiny můžete vytvořit jednu rutinu, která může změnit jeho funkčnost na základě toho, jakou skupinu parametrů určuje uživatel.
Příkladem rutiny, která používá dvě sady parametrů k definování různých funkcí, je rutina Get-EventLog, která je poskytována prostředím Windows PowerShell. Tato rutina vrátí různé informace, když uživatel zadá parametr List nebo LogName. Pokud je zadán parametr LogName, rutina vrátí informace o událostech v daném protokolu událostí. Pokud je zadán parametr List, rutina vrátí informace o samotných souborech protokolu (ne informace o události, které obsahují). V tomto případě parametry List a LogName identifikují dvě samostatné sady parametrů.
Dvě důležité věci, které je potřeba pamatovat na sady parametrů, je, že modul runtime Prostředí Windows PowerShell používá pouze jednu sadu parametrů pro určitý vstup a že každá sada parametrů musí mít alespoň jeden parametr, který je pro tuto sadu parametrů jedinečný.
K ilustraci tohoto posledního bodu používá tato rutina Stop-Proc tři sady parametrů: ProcessName, ProcessIda InputObject. Každá z těchto sad parametrů má jeden parametr, který není v ostatních sadách parametrů. Sady parametrů můžou sdílet další parametry, ale rutina používá jedinečné parametry ProcessName, ProcessIda InputObject k identifikaci sady parametrů, které má modul runtime Prostředí Windows PowerShell používat.
Deklarace třídy rutiny
Prvním krokem při vytváření rutin je vždy pojmenování rutiny a deklarování třídy .NET, která tuto rutinu implementuje. Pro tuto rutinu se používá sloveso "Stop" životního cyklu, protože rutina zastaví systémové procesy. Název podstatného jména "Proc" se používá, protože rutina pracuje na procesech. V následující deklaraci si všimněte, že příkaz rutiny a název podstatného jména se odráží v názvu třídy rutiny.
Poznámka:
Další informace o schválených názvech rutin naleznete v tématu Názvy sloves rutin.
Následující kód je definice třídy pro tuto rutinu 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
Deklarování parametrů rutiny
Tato rutina definuje tři parametry potřebné jako vstup rutiny (tyto parametry také definují sady parametrů) a také parametr Force, který spravuje, co rutina dělá, a parametr PassThru určující, jestli rutina odesílá výstupní objekt prostřednictvím kanálu. Ve výchozím nastavení tato rutina neprovádí objekt přes kanál. Další informace o těchto posledních dvou parametrech najdete v tématu Vytvoření rutiny, která upravuje systémovou.
Deklarování parametru Name
Tento vstupní parametr umožňuje uživateli zadat názvy procesů, které se mají zastavit. Všimněte si, že klíčové slovo atributu ParameterSetName atributu System.Management.Automation.ParameterAttribute určuje ProcessName parametr nastaven pro tento parametr.
[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
Všimněte si také, že alias ProcessName je předán tomuto parametru.
Deklarování parametru ID
Tento vstupní parametr umožňuje uživateli zadat identifikátory procesů, které se mají zastavit. Všimněte si, že klíčové slovo atributu ParameterSetName atributu System.Management.Automation.ParameterAttribute určuje sadu parametrů 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
Všimněte si také, že tento parametr má alias ProcessId.
Deklarování parametru InputObject
Tento vstupní parametr umožňuje uživateli zadat vstupní objekt, který obsahuje informace o procesech, které se mají zastavit. Všimněte si, že klíčové slovo atributu ParameterSetName atributu System.Management.Automation.ParameterAttribute určuje InputObject parametr nastaven pro tento parametr.
[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
Všimněte si také, že tento parametr nemá žádný alias.
Deklarování parametrů v několika sadách parametrů
Přestože musí existovat jedinečný parametr pro každou sadu parametrů, parametry mohou patřit do více než jedné sady parametrů. V těchto případech dejte sdílenému parametru System.Management.Automation.ParameterAttribute deklaraci atributu pro každou sadu, do které parametr patří. Pokud je parametr ve všech sadách parametrů, stačí deklarovat atribut parametru pouze jednou a není nutné zadat název sady parametrů.
Přepsání metody zpracování vstupu
Každá rutina musí přepsat metodu zpracování vstupu, nejčastěji se jedná o metodu System.Management.Automation.Cmdlet.ProcessRecord. V této rutině se metoda System.Management.Automation.Cmdlet.ProcessRecord přepíše, aby rutina mohl zpracovat libovolný počet procesů. Obsahuje příkaz Select, který volá jinou metodu na základě toho, který parametr nastaven uživatel zadal.
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
Pomocné metody volané příkazem Select nejsou zde popsány, ale jejich implementace se zobrazí v kompletní ukázce kódu v další části.
Ukázka kódu
Úplný vzorový kód jazyka C# najdete v tématu StopProcessSample04 Sample.
Definování typů objektů a formátování
Windows PowerShell předává informace mezi rutinami pomocí objektů .NET. Proto může být potřeba, aby rutina definovala vlastní typ, nebo může být potřeba rozšířit existující typ poskytovaný jinou rutinou. Další informace o definování nových typů nebo rozšíření existujících typů naleznete v tématu Rozšíření typů objektů a formátování.
Sestavení rutiny
Po implementaci rutiny ji musíte zaregistrovat ve Windows PowerShellu prostřednictvím modulu snap-in Prostředí Windows PowerShell. Další informace o registraci rutin naleznete v tématu Postup registrace rutin, poskytovatelů a hostitelských aplikací.
Testování rutiny
Když je vaše rutina zaregistrovaná ve Windows PowerShellu, otestujte ji spuštěním na příkazovém řádku. Tady je několik testů, které ukazují, jak lze parametry ProcessId a InputObject použít k otestování sad parametrů k zastavení procesu.
Po spuštění Windows PowerShellu spusťte rutinu Stop-Proc s parametrem
ProcessIdnastaveným tak, aby se proces zastavil na základě jeho identifikátoru. V tomto případě rutina k zastavení procesu používá parametrProcessIdnastavený.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"): YPři spuštění Windows PowerShellu spusťte rutinu Stop-Proc s parametrem
InputObjectnastaveným tak, aby se zastavily procesy u objektu Poznámkového bloku načteného příkazemGet-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
Viz také
Vytvoření rutiny, která upraví systémovou
Vytvoření rutin prostředí Windows PowerShell
rozšíření typů objektů a formátování