Aliassen, jokertekenuitbreiding en Help toevoegen aan cmdlet-parameters

In deze sectie wordt beschreven hoe u aliassen, jokertekens en Help-berichten toevoegt aan de parameters van de Stop-Proc cmdlet (beschreven in Een cmdlet maken die het systeem wijzigt).

Deze Stop-Proc cmdlet probeert processen te stoppen die worden opgehaald met behulp van de Get-Proc cmdlet (beschreven in Uw eerste cmdlet maken).

De cmdlet definiëren

De eerste stap bij het maken van cmdlets is altijd de naam van de cmdlet en het declareren van de .NET-klasse die de cmdlet implementeert. Omdat u een cmdlet schrijft om het systeem te wijzigen, moet deze dienovereenkomstig worden genoemd. Omdat deze cmdlet systeemprocessen stopt, wordt de werkwoordstop gebruikt, gedefinieerd door de klasse System.Management.Automation.Verbslifecycle , met het zelfstandig naamwoord Proc om het proces aan te geven. Zie Namen van cmdlet-werkwoorden voor cmdlets voor meer informatie over goedgekeurde cmdlet-werkwoorden.

De volgende code is de klassedefinitie voor deze Stop-Proc cmdlet.

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

Parameters definiëren voor systeemwijziging

Uw cmdlet moet parameters definiëren die systeemwijzigingen en feedback van gebruikers ondersteunen. De cmdlet moet een naamparameter of equivalent definiëren, zodat de cmdlet het systeem kan wijzigen op een soort id. Daarnaast moet de cmdlet de parameters Force en PassThru definiëren. Zie Een cmdlet maken waarmee het systeem wordt gewijzigd voor meer informatie over deze parameters.

Een parameteralias definiëren

Een parameteralias kan een alternatieve naam of een goed gedefinieerde korte naam van 1 letter of 2 letter zijn voor een cmdlet-parameter. In beide gevallen is het doel van het gebruik van aliassen het invoeren van gebruikers vanaf de opdrachtregel te vereenvoudigen. Windows PowerShell ondersteunt parameteraliassen via het kenmerk System.Management.Automation.Aliasattribute, die gebruikmaakt van de syntaxis [Alias()]van de declaratie.

De volgende code laat zien hoe een alias wordt toegevoegd aan de parameter 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;

Naast het gebruik van het kenmerk System.Management.Automation.Aliasattribute voert de Windows PowerShell runtime gedeeltelijke naamkoppeling uit, zelfs als er geen aliassen zijn opgegeven. Als uw cmdlet bijvoorbeeld een FileName-parameter heeft en dat de enige parameter is waarmee wordt gestartF, kan de gebruiker de vermelding invoerenFilename, File``Filenam, , of F Finog steeds herkennen als de parameter FileName.

Help voor parameters maken

Windows PowerShell kunt u Help maken voor cmdlet-parameters. Doe dit voor elke parameter die wordt gebruikt voor systeemwijziging en feedback van gebruikers. Voor elke parameter ter ondersteuning van Help kunt u het kenmerk Trefwoord HelpMessage instellen in de declaratie van het kenmerk System.Management.Automation.Parameterattribute . Dit trefwoord definieert de tekst die moet worden weergegeven aan de gebruiker voor hulp bij het gebruik van de parameter. U kunt ook het trefwoord HelpMessageBaseName instellen om de basisnaam van een resource te identificeren die voor het bericht moet worden gebruikt. Als u dit trefwoord instelt, moet u ook het trefwoord HelpMessageResourceId instellen om de resource-id op te geven.

De volgende code van deze Stop-Proc cmdlet definieert het kenmerk Trefwoord HelpMessage voor de parameter 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."
)]

Een invoerverwerkingsmethode overschrijven

Uw cmdlet moet een invoerverwerkingsmethode overschrijven. Dit is meestal System.Management.Automation.Cmdlet.ProcessRecord. Wanneer u het systeem wijzigt, moet de cmdlet de methoden System.Management.Automation.Cmdlet.ShouldProcess en System.Management.Automation.Cmdlet.ShouldContinue aanroepen zodat de gebruiker feedback kan geven voordat een wijziging wordt aangebracht. Zie Een cmdlet maken waarmee het systeem wordt gewijzigd voor meer informatie over deze methoden.

Ondersteuning voor uitbreiding van jokertekens

Als u de selectie van meerdere objecten wilt toestaan, kunt u de klassen System.Management.Automation.WildcardPattern en System.Management.Automation.WildcardOptions gebruiken om ondersteuning voor jokertekenuitbreiding te bieden voor parameterinvoer. Voorbeelden van jokertekenpatronen zijn lsa*, *.txten [a-c]*. Gebruik het achteraanhalingsteken (`) als escapeteken wanneer het patroon een teken bevat dat letterlijk moet worden gebruikt.

Jokertekenuitbreidingen van bestands- en padnamen zijn voorbeelden van veelvoorkomende scenario's waarbij de cmdlet ondersteuning voor padinvoer mogelijk wil toestaan wanneer de selectie van meerdere objecten is vereist. Een veelvoorkomend geval is in het bestandssysteem, waarbij een gebruiker alle bestanden in de huidige map wil zien.

U moet slechts zelden een aangepast jokertekenpatroon nodig hebben dat overeenkomt met de implementatie. In dit geval moet uw cmdlet de volledige POSIX 1003.2-, 3.13-specificatie voor uitbreiding met jokertekens of de volgende vereenvoudigde subset ondersteunen:

  • Vraagteken (?). Komt overeen met elk teken op de opgegeven locatie.
  • Sterretje (*). Komt overeen met nul of meer tekens vanaf de opgegeven locatie.
  • Haakje openen ([). Introduceert een patroonhaakexpressie die tekens of een reeks tekens kan bevatten. Als een bereik is vereist, wordt een afbreekstreepje (-) gebruikt om het bereik aan te geven.
  • Haakje sluiten (]). Hiermee wordt een expressie voor een patroonhaak beëindigd.
  • Escapeteken voor back-quote (`). Geeft aan dat het volgende teken letterlijk moet worden genomen. Houd er rekening mee dat bij het opgeven van het back-quote-teken vanaf de opdrachtregel (in tegenstelling tot het programmatisch opgeven), het escapeteken voor back-quote twee keer moet worden opgegeven.

De volgende code laat zien hoe u opties voor jokertekens instelt en het jokertekenpatroon definieert dat wordt gebruikt voor het omzetten van de parameter Naam voor deze cmdlet.

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

De volgende code laat zien hoe u kunt testen of de procesnaam overeenkomt met het gedefinieerde jokertekenpatroon. Als de procesnaam in dit geval niet overeenkomt met het patroon, blijft de cmdlet de volgende procesnaam ophalen.

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

Codevoorbeeld

Zie StopProcessSample03 Sample voor de volledige C#-voorbeeldcode.

Objecttypen en opmaak definiëren

Windows PowerShell informatie doorgeeft tussen cmdlets met behulp van .Net-objecten. Daarom moet een cmdlet mogelijk een eigen type definiëren of moet de cmdlet mogelijk een bestaand type uitbreiden dat wordt geleverd door een andere cmdlet. Zie Objecttypen en opmaak uitbreiden voor meer informatie over het definiëren van nieuwe typen of het uitbreiden van bestaande typen.

De cmdlet bouwen

Nadat u een cmdlet hebt geïmplementeerd, moet deze worden geregistreerd bij Windows PowerShell via een Windows PowerShell module. Zie Cmdlets, providers en hosttoepassingen registreren voor meer informatie over het registreren van cmdlets.

De cmdlet testen

Wanneer uw cmdlet is geregistreerd bij Windows PowerShell, kunt u deze testen door deze uit te voeren op de opdrachtregel. Laten we de voorbeeld-Stop-Proc cmdlet testen. Zie de Aan de slag met Windows PowerShell voor meer informatie over het gebruik van cmdlets vanaf de opdrachtregel.

  • Startmenu Windows PowerShell en gebruiken Stop-Proc om een proces te stoppen met behulp van de ProcessName-alias voor de parameter Name.

    PS> Stop-Proc -ProcessName notepad
    

    De volgende uitvoer wordt weergegeven.

    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
    
  • Voer de volgende vermelding uit op de opdrachtregel. Omdat de naamparameter verplicht is, wordt u hierom gevraagd. Als !? u invoert, wordt de Help-tekst weergegeven die aan de parameter is gekoppeld.

    PS> Stop-Proc
    

    De volgende uitvoer wordt weergegeven.

    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
    
  • Maak nu de volgende vermelding om alle processen te stoppen die overeenkomen met het jokertekenpatroon *note*. U wordt gevraagd voordat u elk proces stopt dat overeenkomt met het patroon.

    PS> Stop-Proc -Name *note*
    

    De volgende uitvoer wordt weergegeven.

    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
    

    De volgende uitvoer wordt weergegeven.

    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
    

    De volgende uitvoer wordt weergegeven.

    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
    

Zie ook