Přidání parametrů, které zpracovávají vstup z příkazového řádku

Jedním zdrojem vstupu pro rutinu je příkazový řádek. Toto téma popisuje, jak přidat parametr do Get-Proc rutiny (která je popsána v tématu Vytvoření první rutiny), aby rutina mohla zpracovávat vstup z místního počítače na základě explicitních objektů předaných do rutiny. Get-ProcRutina popsaná tady načte procesy na základě jejich názvů a potom zobrazí informace o procesech v příkazovém řádku.

Definování třídy rutiny

prvním krokem při vytváření rutiny je pojmenovávání rutin a deklarace třídy .NET Framework, která implementuje rutinu. Tato rutina načte informace o procesu, takže název příkazu, který tady zvolíte, je "Get". (Téměř jakýkoli druh rutiny, která je schopná načíst informace, může zpracovat vstup z příkazového řádku.) Další informace o schválených operacích rutin najdete v tématu názvy operací rutiny.

Zde je deklarace třídy Get-Proc rutiny. Podrobnosti o této definici jsou k dispozici při vytváření první rutiny.

[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand: Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
    Inherits Cmdlet

Deklarace parametrů

Parametr rutiny umožňuje uživateli poskytnout vstup do rutiny. V následujícím příkladu Get-Proc a Get-Member jsou názvy zřetězených rutin a MemberType je parametrem Get-Member rutiny. Parametr má argument "Property".

PS> Get-proc; get-member -MemberType – vlastnost

Chcete-li deklarovat parametry pro rutinu, je nutné nejprve definovat vlastnosti, které reprezentují parametry. v Get-Proc rutině je jediným parametrem Name , což v tomto případě představuje název objektu procesu .NET Framework, který se má načíst. Třída rutiny proto definuje vlastnost typu String pro příjem pole názvů.

Zde je deklarace parametru pro Name parametr Get-Proc rutiny.

/// <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

pro informování modulu runtime Windows PowerShell, že je tato vlastnost Name parametr, je do definice vlastnosti přidán 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 Public. parametry, které nejsou označeny jako veřejné výchozí hodnoty, a nejsou nalezeny modulem runtime Windows PowerShell.

Tato rutina používá pole řetězců pro Name parametr. Pokud je to možné, rutina by měla definovat také parametr jako pole, protože to umožňuje rutině přijmout více než jednu položku.

Věci, které si zapamatujete o definicích parametrů

  • předdefinované názvy parametrů Windows PowerShell a datové typy by měly být znovu použity co nejvíce, aby bylo zajištěno, že je vaše rutina kompatibilní s rutinami Windows PowerShell. Například pokud všechny rutiny používají předdefinovaný Id název parametru k identifikaci prostředku, uživatel bude snadno pochopit význam parametru bez ohledu na to, jakou rutinu používají. V podstatě názvy parametrů následují stejná pravidla jako ta, která se používají pro názvy proměnných v modulu CLR (Common Language Runtime). Další informace o pojmenovávání parametrů najdete v tématu názvy parametrů rutiny.

  • Windows PowerShell vyhrazuje několik názvů parametrů, aby bylo možné zajistit konzistentní uživatelské prostředí. Nepoužívejte tyto názvy parametrů: WhatIf , Confirm , Verbose , Debug , Warn , ErrorAction ,, a ErrorVariable OutVariable OutBuffer . Kromě toho jsou rezervované následující aliasy těchto názvů parametrů: vb , db , ea , ev , ov a ob .

  • Name je jednoduchý a běžný název parametru, který se doporučuje pro použití ve vašich rutinách. Je lepší zvolit název parametru, například to, že se jedná o složitý název, který je jedinečný pro konkrétní rutinu a obtížné si ho zapamatovat.

  • u parametrů se nerozlišují velká a malá písmena v Windows PowerShell, i když ve výchozím nastavení prostředí zachovává velká a malá písmena. Rozlišování velkých a malých písmen argumentů závisí na operaci rutiny. Argumenty jsou předány parametru, jak je uvedeno na příkazovém řádku.

  • Příklady jiných deklarací parametrů naleznete v tématu parametry rutiny.

Deklarování parametrů jako poziční nebo pojmenované

Rutina musí nastavit každý parametr jako buď poziční, nebo pojmenovaný parametr. Oba typy parametrů akceptují jednotlivé argumenty, více argumentů oddělených čárkami a nastavení logických hodnot. Logický parametr, který se označuje 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 Name parametr jako poziční parametr s pozicí. 0. To znamená, že první argument, který uživatel zadá do příkazového řádku, je automaticky vložen pro tento parametr. 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 se nesmí zadat parametry, doporučujeme, abyste si přejmenovali nejpoužívanější parametry, aby uživatelé nemuseli zadávat název parametru.

Deklarování parametrů jako povinné nebo volitelné

Rutina musí nastavit každý parametr buď jako volitelný, nebo jako povinný parametr. V ukázkové Get-Proc rutině Name je parametr definován jako volitelný, protože Mandatory klíčové slovo není nastaveno v deklaraci atributu.

Podpora ověřování parametrů

Ukázková Get-Proc rutina přidá ověřovací atribut Input. System. Management. Automation. Validatenotnulloremptyattributedo Name parametru pro povolení ověření, že vstup není null ani prázdný. Tento atribut je jedním z několika ověřovacích atributů poskytovaných Windows PowerShell. Příklady jiných atributů ověřování najdete v tématu ověřování vstupu parametru.

[Parameter(Position = 0)]
[ValidateNotNullOrEmpty]
public string[] Name

Přepsání vstupní metody zpracování

Pokud vaše rutina zpracovává vstup z příkazového řádku, musí přepsat příslušné metody zpracování vstupu. Základní metody zpracování vstupu jsou představeny při vytváření první rutiny.

Get-ProcRutina přepisuje metodu System. Management. Automation. rutina. ProcessRecord pro zpracování Name vstupu parametru poskytnutého uživatelem nebo skriptem. Tato metoda získá procesy pro každý požadovaný název procesu nebo pro procesy, pokud není zadán žádný název. Všimněte si, že v System. Management. Automation. rutine. ProcessRecordvolání System. Management. Automation. rutine WriteObject% 28System. Object% 2CSystem. Boolean %29 je výstupním mechanismem pro odesílání výstupních objektů do kanálu. druhý parametr tohoto volání, enumerateCollection , je nastavena na hodnotu true pro informování modulu runtime Windows PowerShell, aby vypsal výstupní pole objektů procesu a zapisoval jeden proces do příkazového řádku.

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

Vzorek kódu

Úplný ukázkový kód jazyka C# naleznete v tématu GetProcessSample02 Sample.

Definování typů objektů a formátování

Windows PowerShell předává informace mezi rutinami pomocí objektů .NET Framework. V důsledku toho může rutina potřebovat definovat vlastní typ, nebo může být nutné, aby rutina rozšířila existující typ poskytnutý 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 je nutné ji zaregistrovat pomocí Windows PowerShell pomocí modulu snap-in Windows PowerShell. Další informace o registraci rutin najdete v tématu jak registrovat rutiny, zprostředkovatele a hostitelské aplikace.

Testování rutiny

když je vaše rutina zaregistrovaná ve službě Windows PowerShell, můžete ji otestovat spuštěním na příkazovém řádku. Tady jsou dva způsoby testování kódu ukázkové rutiny. Další informace o použití rutin z příkazového řádku naleznete v tématu Začínáme with Windows PowerShell.

  • na příkazovém řádku Windows PowerShell použijte následující příkaz, který zobrazí seznam procesů aplikace Internet Explorer s názvem "iexplore".

    get-proc -name iexplore
    

    Zobrazí 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   iexplore
    
  • chcete-li zobrazit seznam procesů aplikace Internet Explorer, Outlook a Poznámkový blok s názvem "iexplore", "Outlook" a "Notepad", použijte následující příkaz. Pokud je k dispozici více procesů, zobrazí se všechny.

    get-proc -name iexplore, outlook, notepad
    

    Zobrazí 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í vstup z kanálu

Vytvoření první rutiny

Rozšíření typů objektů a formátování

Jak registrovat rutiny, zprostředkovatele a hostitelské aplikace

Referenční informace k Windows PowerShellu

Ukázky rutin