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.
Jedním ze zdrojů vstupu pro rutinu je příkazový řádek. Toto téma popisuje, jak přidat parametr do rutiny Get-Proc (která je popsaná v Vytvoření první rutiny), aby rutina mohl zpracovávat vstup z místního počítače na základě explicitních objektů předaných rutině. Zde popsaná rutina Get-Proc načte procesy na základě jejich názvů a pak zobrazí informace o procesech na příkazovém řádku.
Definování třídy rutiny
Prvním krokem při vytváření rutin je pojmenování rutin a deklarace třídy rozhraní .NET Framework, která tuto rutinu implementuje. Tato rutina načte informace o procesu, takže zde zvolený název příkazu je Get. (Téměř jakýkoli druh rutiny, která dokáže načíst informace, může zpracovat vstup příkazového řádku.) Další informace o schválených rutinách naleznete v tématu Názvy příkazů rutin.
Tady je deklarace třídy pro rutinu Get-Proc. Podrobnosti o této definici najdete v Vytvoření první rutiny.
[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand: Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
Inherits Cmdlet
Deklarování parametrů
Parametr rutiny umožňuje uživateli zadat vstup do rutiny. V následujícím příkladu jsou Get-Proc a Get-Member názvy rutin kanálu a MemberType je parametrem pro rutinu Get-Member. Parametr má argument "vlastnost".
PS> Get-Proc ; vlastnost Get-Member -MemberType
Chcete-li deklarovat parametry pro rutinu, musíte nejprve definovat vlastnosti, které představují parametry. V rutině Get-Proc je jediným parametrem Name, který v tomto případě představuje název objektu procesu rozhraní .NET Framework, který se má načíst. Třída rutiny proto definuje vlastnost typu řetězec pro přijetí pole názvů.
Tady je deklarace parametru pro parametr Name rutiny Get-Proc.
/// <summary>
/// Specify the cmdlet Name parameter.
/// </summary>
[Parameter(Position = 0)]
[ValidateNotNullOrEmpty]
public string[] Name
{
get { return processNames; }
set { processNames = value; }
}
private string[] processNames;
#endregion Parameters
<Parameter(Position:=0), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
Chcete-li informovat modul runtime prostředí Windows PowerShell, že tato vlastnost je parametrem Name, přidá se do definice vlastnosti atribut System.Management.Automation.ParameterAttribute. Základní syntaxe pro deklarování tohoto atributu je [Parameter()].
Poznámka:
Parametr musí být explicitně označen jako veřejný. Parametry, které nejsou označeny jako veřejné výchozí pro interní a nejsou nalezeny modulem runtime Prostředí Windows PowerShell.
Tato rutina používá pole řetězců pro parametr Name. Pokud je to možné, měla by rutina také definovat parametr jako pole, protože rutina umožňuje přijmout více než jednu položku.
Co je potřeba pamatovat na definice parametrů
Předdefinované názvy parametrů Windows PowerShellu a datové typy by se měly co nejvíce používat, aby byla vaše rutina kompatibilní s rutinami Windows PowerShellu. Pokud například všechny rutiny používají předdefinovaný název parametru
Idk identifikaci prostředku, uživatel snadno pochopí význam parametru bez ohledu na to, jakou rutinu používá. Názvy parametrů se v podstatě řídí stejnými pravidly jako názvy proměnných v modulu CLR (Common Language Runtime). Další informace o pojmenování parametrů naleznete v tématu Názvy parametrů rutiny.Prostředí Windows PowerShell si vyhrazuje několik názvů parametrů, aby poskytoval konzistentní uživatelské prostředí. Nepoužívejte tyto názvy parametrů:
WhatIf,Confirm,Verbose,Debug,Warn,ErrorAction,ErrorVariable,OutVariableaOutBuffer. Kromě toho jsou pro tyto názvy parametrů vyhrazeny následující aliasy:vb,db,ea,ev,ovaob.Nameje jednoduchý a běžný název parametru, který se doporučuje použít v rutinách. Je lepší zvolit název parametru, jako je tento, než složitý název, který je jedinečný pro konkrétní rutinu a těžko si zapamatovat.Parametry v prostředí Windows PowerShell nerozlišují malá a velká písmena, i když ve výchozím nastavení prostředí zachovává malá a velká písmena. Citlivost argumentů na malá a velká písmena závisí na operaci rutiny. Argumenty se předávají parametru zadanému na příkazovém řádku.
Příklady jiných deklarací parametrů najdete v tématu parametry rutiny.
Deklarování parametrů jako pozičních nebo pojmenovaných
Rutina musí každý parametr nastavit jako poziční nebo pojmenovaný parametr. Oba typy parametrů přijímají jednotlivé argumenty, více argumentů oddělených čárkami a logickými nastaveními. Logický parametr, označovaný také jako přepínač , zpracovává pouze logická nastavení. Přepínač slouží k určení přítomnosti parametru. Doporučená výchozí hodnota je false.
Ukázková Get-Proc rutina definuje parametr Name jako poziční parametr s pozicí 0. To znamená, že první argument, který uživatel zadá do příkazového řádku, se pro tento parametr automaticky vloží. Pokud chcete definovat pojmenovaný parametr, pro který musí uživatel zadat název parametru z příkazového řádku, ponechte Position klíčové slovo mimo deklaraci atributu.
Poznámka:
Pokud parametry nesmí být pojmenované, doporučujeme nastavit nejužitenější umístění parametrů, aby uživatelé nemuseli zadávat název parametru.
Deklarace parametrů jako povinných nebo nepovinných
Rutina musí každý parametr nastavit jako volitelný nebo povinný parametr. V ukázkové Get-Proc rutině je parametr Name definován jako volitelný, protože klíčové slovo Mandatory není nastaveno v deklaraci atributu.
Podpora ověřování parametrů
Ukázková rutina Get-Proc přidá atribut ověření vstupu, System.Management.Automation.ValidateNotNullOrEmptyAttribute, do parametru Name, aby bylo možné ověřit, že vstup není null ani prázdný. Tento atribut je jedním z několika ověřovacích atributů poskytovaných prostředím Windows PowerShell. Příklady dalších ověřovacích atributů najdete v tématu ověřování vstupníchparametru .
[Parameter(Position = 0)]
[ValidateNotNullOrEmpty]
public string[] Name
Přepsání metody zpracování vstupu
Pokud vaše rutina zpracovává vstup příkazového řádku, musí přepsat příslušné metody zpracování vstupu. Základní metody zpracování vstupu jsou zavedeny v Vytvoření první rutiny.
Rutina Get-Proc přepíše metodu System.Management.Automation.Automation.ProcessRecord pro zpracování vstupu parametrů Name poskytnutého uživatelem nebo skriptem. Tato metoda získá procesy pro každý požadovaný název procesu nebo všechny procesy, pokud není zadaný žádný název. Všimněte si, že v System.Management.Automation.Cmdlet.ProcessRecordvolání System.Management.Automation.Cmdlet.Write Object je výstupní mechanismus pro odesílání výstupních objektů do kanálu. Druhý parametr tohoto volání, enumerateCollection, je nastaven na true informovat modul runtime prostředí Windows PowerShell, aby vytvořil výčet výstupní pole procesních objektů a zapsat jeden proces na příkazový řádek.
protected override void ProcessRecord()
{
// If no process names are passed to the cmdlet, get all processes.
if (processNames == null)
{
// Write the processes to the pipeline making them available
// to the next cmdlet. The second argument of this call tells
// PowerShell to enumerate the array, and send one process at a
// time to the pipeline.
WriteObject(Process.GetProcesses(), true);
}
else
{
// If process names are passed to the cmdlet, get and write
// the associated processes.
foreach (string name in processNames)
{
WriteObject(Process.GetProcessesByName(name), true);
}
}
}
Protected Overrides Sub ProcessRecord()
'/ If no process names are passed to the cmdlet, get all processes.
If processNames Is Nothing Then
Dim processes As Process()
processes = Process.GetProcesses()
End If
'/ If process names are specified, write the processes to the
'/ pipeline to display them or make them available to the next cmdlet.
For Each name As String In processNames
'/ The second parameter of this call tells PowerShell to enumerate the
'/ array, and send one process at a time to the pipeline.
WriteObject(Process.GetProcessesByName(name), True)
Next
End Sub 'ProcessRecord
Ukázka kódu
Úplný vzorový kód jazyka C# najdete v tématu GetProcessSample02 Sample.
Definování typů objektů a formátování
Windows PowerShell předává informace mezi rutinami pomocí objektů rozhraní .NET Framework. V důsledku toho 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 pomocí 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 rutina zaregistrovaná ve Windows PowerShellu, můžete ji otestovat spuštěním na příkazovém řádku. Tady jsou dva způsoby, jak otestovat kód ukázkové rutiny. Další informace o používání rutin z příkazového řádku najdete v tématu Začínáme s prostředím Windows PowerShell.
Na příkazovém řádku Windows PowerShellu pomocí následujícího příkazu vypíšete proces Internet Exploreru s názvem IEXPLORE.
Get-Proc -Name iexploreZobrazí se následující výstup.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 354 11 10036 18992 85 0.67 3284 iexplorePokud chcete zobrazit seznam procesů Internet Exploreru, Outlooku a Poznámkového bloku s názvem "IEXPLORE", "OUTLOOK" a "NOTEPAD", použijte následující příkaz. Pokud existuje více procesů, zobrazí se všechny procesy.
Get-Proc -Name iexplore, outlook, notepadZobrazí se následující výstup.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 732 21 24696 5000 138 2.25 2288 iexplore 715 19 20556 14116 136 1.78 3860 iexplore 3917 62 74096 58112 468 191.56 1848 OUTLOOK 39 2 1024 3280 30 0.09 1444 notepad 39 2 1024 356 30 0.08 3396 notepad
Viz také
přidání parametrů, které zpracovávají vstupní kanálu
vytvoření prvního rutiny
rozšíření typů objektů a formátování
registrace rutin, poskytovatelů a hostitelských aplikací
referenční prostředí Windows PowerShell