Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 systeemwijzigt).
Deze Stop-Proc cmdlet probeert processen te stoppen die worden opgehaald met behulp van de Get-Proc cmdlet (beschreven in Het maken van uw eerste cmdlet).
De cmdlet definiëren
De eerste stap bij het maken van de cmdlet is altijd de naamgeving 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 het werkwoord Stoppengebruikt, gedefinieerd door de klasse System.Management.Automation.VerbsLifecycle, met het zelfstandig naamwoord Proc om het proces aan te geven. Zie Cmdlet Verb Namesvoor 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 Naam parameter of equivalent definiëren, zodat de cmdlet het systeem kan wijzigen op een soort id. Daarnaast moet de cmdlet de parameters Forceren en PassThru- definiëren. Zie Een cmdlet maken waarmee het systeemwordt gewijzigd voor meer informatie over deze parameters.
Een parameteralias definiëren
Een parameteralias kan een alternatieve naam of een goed gedefinieerde korte of tweeletterige korte naam voor een cmdlet-parameter zijn. 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, dat gebruikmaakt van de syntaxis van de declaratie [Alias()].
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 parameter FileName heeft en dat de enige parameter is die begint met F, kan de gebruiker Filename, Filenam, File, Fiof F invoeren en de vermelding nog steeds herkennen als de parameter FileName.
Help voor parameters maken
Met Windows PowerShell kunt u Help voor cmdlet-parameters maken. Doe dit voor elke parameter die wordt gebruikt voor systeemwijziging en feedback van gebruikers. Voor elke parameter ter ondersteuning van Help kunt u het trefwoord HelpMessage kenmerk instellen in de System.Management.Automation.ParameterAttribute- kenmerkdeclaratie. Met dit trefwoord wordt de tekst gedefinieerd die aan de gebruiker moet worden weergegeven 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 de HelpMessageResourceId instellen trefwoord om de resource-id op te geven.
De volgende code van deze Stop-Proc cmdlet definieert het trefwoord HelpMessage kenmerk 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 wordt meestal System.Management.Automation.Cmdlet.ProcessRecord. Wanneer u het systeem wijzigt, moet de cmdlet de System.Management.Automation.Cmdlet.ShouldProcess en System.Management.Automation.Cmdlet.ShouldContinue methoden aanroepen om de gebruiker in staat te stellen feedback te geven voordat een wijziging wordt aangebracht. Zie Een cmdlet maken waarmee het systeemwordt gewijzigd voor meer informatie over deze methoden.
Ondersteuning voor uitbreiding van jokertekens
Als u de selectie van meerdere objecten wilt toestaan, kunt u met de cmdlet de System.Management.Automation.WildcardPattern en System.Management.Automation.WildcardOptions klassen gebruiken om ondersteuning voor jokertekens voor parameterinvoer te bieden. Voorbeelden van jokertekenpatronen zijn lsa*, *.txten [a-c]*. Gebruik het teken achteraanhalingsteken (`) als escapeteken wanneer het patroon een teken bevat dat letterlijk moet worden gebruikt.
Uitbreidingen met jokertekens 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 vereist is. 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 jokertekenuitbreiding of de volgende vereenvoudigde subset ondersteunen:
- Vraagteken (
?). Komt overeen met een willekeurig teken op de opgegeven locatie. - Sterretje (
*). Komt overeen met nul of meer tekens vanaf de opgegeven locatie. - Haak openen (
[). Introduceert een patroonhaakexpressie die tekens of een bereik van tekens kan bevatten. Als een bereik vereist is, wordt een afbreekstreepje (-) gebruikt om het bereik aan te geven. - Haak sluiten (
]). Hiermee beëindigt u een patroonhaakexpressie. - Escapeteken (
`). Geeft aan dat het volgende teken letterlijk moet worden genomen. Houd er rekening mee dat bij het opgeven van het teken back-quote vanaf de opdrachtregel (in tegenstelling tot het programmatisch opgeven), het escapeteken voor back-quote twee keer moet worden opgegeven.
Notitie
Zie Ondersteuning voor jokertekens in cmdlet-parametersvoor meer informatie over jokertekenpatronen.
De volgende code laat zien hoe u opties voor jokertekens instelt en het jokertekenpatroon definieert dat wordt gebruikt voor het omzetten van de parameter Name 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 niet overeenkomt met het patroon, blijft de cmdlet de volgende procesnaam ophalen.
if (!wildcard.IsMatch(processName))
{
continue;
}
Codevoorbeeld
Zie StopProcessSample03 Samplevoor de volledige C#-voorbeeldcode.
Objecttypen en opmaak definiëren
Windows PowerShell geeft informatie door 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 uitbreidenvoor 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 registrerenvoor 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. We gaan de voorbeeld-Stop-Proc cmdlet testen. Zie de Aan de slag met Windows PowerShellvoor meer informatie over het gebruik van cmdlets vanaf de opdrachtregel.
Start Windows PowerShell en gebruik
Stop-Procom een proces te stoppen met behulp van de alias ProcessName voor de parameter Name.PS> Stop-Proc -ProcessName notepadDe 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"): YVoer de volgende vermelding uit op de opdrachtregel. Omdat de parameter Name verplicht is, wordt u hierom gevraagd. Als u
!?invoert, wordt de Help-tekst weergegeven die aan de parameter is gekoppeld.PS> Stop-ProcDe 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]: notepadMaak 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"): YDe 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"): NDe 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