Sdílet prostřednictvím


Přidání aliasů, podpory zástupných znaků a nápovědy pro parametry rutiny

Tato část popisuje, jak přidat aliasy, rozšíření zástupných znaků a zprávy nápovědy k parametrům rutiny Stop-Proc (popsané v tématu Vytvoření rutiny, která upravuje systémovou).

Tato rutina Stop-Proc se pokusí zastavit procesy, které se načítají pomocí rutiny Get-Proc (popsané v Vytvořeníprvní rutiny).

Definování 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. Protože píšete rutinu pro změnu systému, měla by být odpovídajícím způsobem pojmenována. Vzhledem k tomu, že tato rutina zastaví systémové procesy, používá příkaz Stopdefinované System.Management.Automation.VerbsLifecycle třídy s podstatným Proc indikovat proces. Další informace o schválených rutinách naleznete v tématu Názvy příkazů rutin.

Následující kód je definice třídy pro tuto rutinu Stop-Proc.

[Cmdlet(VerbsLifecycle.Stop, "proc",
        SupportsShouldProcess = true)]
public class StopProcCommand : Cmdlet

Definování parametrů pro úpravu systému

Vaše rutina potřebuje definovat parametry, které podporují úpravy systému a zpětnou vazbu uživatelů. Rutina by měla definovat parametr Name nebo ekvivalent, aby rutina mohla systém upravit nějakým druhem identifikátoru. Kromě toho by rutina měla definovat parametry Force a PassThru. Další informace o těchto parametrech naleznete v tématu Vytvoření rutiny, která upravuje systémovou.

Definování aliasu parametru

Alias parametru může být alternativní název nebo dobře definovaný 1 písmeno nebo krátký název 2 písmen pro parametr rutiny. V obou případech je cílem použití aliasů zjednodušit zadávání uživatelů z příkazového řádku. Windows PowerShell podporuje aliasy parametrů prostřednictvím atributu System.Management.Automation.AliasAttribute, který používá syntaxi deklarace [Alias()].

Následující kód ukazuje, jak se alias přidá do parametru Name.

/// <summary>
/// Specify the mandatory Name parameter used to identify the
/// processes to be stopped.
/// </summary>
[Parameter(
           Position = 0,
           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;

Kromě použití atributu System.Management.Automation.AliasAttribute modul runtime Windows PowerShellu provádí částečné porovnávání názvů, i když nejsou zadány žádné aliasy. Pokud má například vaše rutina parametr FileName a je to jediný parametr, který začíná F, může uživatel zadat Filename, Filenam, File, Finebo F a přesto položku rozpoznat jako parametr FileName.

Vytvoření nápovědy pro parametry

Windows PowerShell umožňuje vytvořit nápovědu pro parametry rutiny. Proveďte tento postup pro všechny parametry používané pro úpravu systému a zpětnou vazbu uživatelů. Pro každý parametr, který podporuje nápovědu, můžete nastavit klíčové slovo atributu HelpMessage v deklaraci atributu System.Management.Automation.ParameterAttribute atributu. Toto klíčové slovo definuje text, který se má uživateli zobrazit za účelem pomoci s použitím parametru. Můžete také nastavit HelpMessageBaseName klíčové slovo k identifikaci základního názvu prostředku, který se má použít pro zprávu. Pokud nastavíte toto klíčové slovo, musíte také nastavit HelpMessageResourceId klíčové slovo určit identifikátor prostředku.

Následující kód z této rutiny Stop-Proc definuje klíčové slovo atributu HelpMessage parametru Name.

/// <summary>
/// Specify the mandatory Name parameter used to identify the
/// processes to be stopped.
/// </summary>
[Parameter(
           Position = 0,
           Mandatory = true,
           ValueFromPipeline = true,
           ValueFromPipelineByPropertyName = true,
           HelpMessage = "The name of one or more processes to stop. Wildcards are permitted."
)]

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

Vaše rutina musí přepsat metodu zpracování vstupu, nejčastěji se jedná o System.Management.Automation.Cmdlet.ProcessRecord. Při úpravě systému by rutina měla volat metody System.Management.Automation.Cmdlet.ShouldProcess a System.Management.Automation.Cmdlet.ShouldContinue metody, které uživateli umožní poskytnout zpětnou vazbu před provedením změny. Další informace o těchto metodách naleznete v tématu Vytvoření rutiny, která upravuje systém.

Podpora rozšíření zástupných znaků

Pokud chcete povolit výběr více objektů, může vaše rutina použít System.Management.Automation.WildcardPattern a System.Management.Automation.WildcardOptions třídy pro rozšíření zástupných znaků pro vstup parametru. Příklady vzorů se zástupnými znaky jsou lsa*, *.txta [a-c]*. Znak zpětné uvozovky (`) použijte jako řídicí znak, pokud vzor obsahuje znak, který by se měl použít doslova.

Rozšíření zástupných znaků názvů souborů a cest jsou příklady běžných scénářů, kdy rutina může chtít povolit podporu vstupů cest, pokud je vyžadován výběr více objektů. Běžným případem je systém souborů, kdy uživatel chce zobrazit všechny soubory umístěné v aktuální složce.

Měli byste potřebovat přizpůsobený vzor se zástupnými znaky odpovídající implementaci jen zřídka. V tomto případě by vaše rutina měla podporovat úplnou specifikaci POSIX 1003.2, 3.13 pro rozšíření zástupných znaků nebo následující zjednodušenou podmnožinu:

  • Otazník (?). Odpovídá libovolnému znaku v zadaném umístění.
  • Hvězdička (*). Odpovídá nule nebo více znaků počínaje zadaným umístěním.
  • Otevřená hranatá závorka ([). Představuje výraz v hranatých závorkách, který může obsahovat znaky nebo rozsah znaků. Pokud je oblast povinná, použije se k označení oblasti spojovník (-).
  • Uzavření závorky (]). Ukončí výraz v hranatých závorkách.
  • Řídicí znak uvozovky (`). Označuje, že další znak by se měl brát doslova. Mějte na paměti, že při zadávání znaku zpětné uvozovky z příkazového řádku (na rozdíl od jeho programového zadání) musí být řídicí znak zpětné uvozovky zadán dvakrát.

Poznámka:

Další informace o vzorech se zástupnými znaky naleznete v tématu Podpora zástupných znaků v parametrech rutiny.

Následující kód ukazuje, jak nastavit možnosti zástupných znaků a definovat vzor zástupných znaků použitý k překladu parametru Name pro tuto rutinu.

WildcardOptions options = WildcardOptions.IgnoreCase |
                          WildcardOptions.Compiled;
WildcardPattern wildcard = new WildcardPattern(name,options);

Následující kód ukazuje, jak otestovat, jestli název procesu odpovídá definovanému vzoru se zástupným znakem. Všimněte si, že pokud v tomto případě název procesu neodpovídá vzoru, rutina pokračuje v získání dalšího názvu procesu.

if (!wildcard.IsMatch(processName))
{
  continue;
}

Ukázka kódu

Úplný vzorový kód jazyka C# najdete v ukázkovéStopProcessSample03 .

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 musí být zaregistrovaný 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, můžete ji otestovat spuštěním na příkazovém řádku. Pojďme ukázkovou rutinu Stop-Proc otestovat. 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.

  • Spusťte Windows PowerShell a pomocí Stop-Proc zastavte proces pomocí aliasu ProcessName pro parametr Name.

    PS> Stop-Proc -ProcessName notepad
    

    Zobrazí se následující výstup.

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (3496)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    
  • Na příkazovém řádku proveďte následující položku. Protože parametr Name je povinný, zobrazí se výzva k jeho zadání. Zadáním !? zobrazíte text nápovědy přidružený k parametru.

    PS> Stop-Proc
    

    Zobrazí se následující výstup.

    Cmdlet Stop-Proc at command pipeline position 1
    Supply values for the following parameters:
    (Type !? for Help.)
    Name[0]: !?
    The name of one or more processes to stop. Wildcards are permitted.
    Name[0]: notepad
    
  • Nyní proveďte následující položku pro zastavení všech procesů, které odpovídají vzoru zástupných znaků *note*. Před zastavením každého procesu, který odpovídá vzoru, se zobrazí výzva.

    PS> Stop-Proc -Name *note*
    

    Zobrazí se následující výstup.

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (1112)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    

    Zobrazí se následující výstup.

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "ONENOTEM (3712)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): N
    

    Zobrazí se následující výstup.

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "ONENOTE (3592)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): N
    

Viz také