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.
Dingen die u moet weten over parametersets
Windows PowerShell definieert een parameterset als een groep parameters die samenwerken. Door de parameters van een cmdlet te groeperen, kunt u één cmdlet maken die de functionaliteit ervan kan wijzigen op basis van de groep parameters die de gebruiker opgeeft.
Een voorbeeld van een cmdlet die gebruikmaakt van twee parametersets om verschillende functies te definiëren, is de Get-EventLog cmdlet die wordt geleverd door Windows PowerShell. Deze cmdlet retourneert verschillende gegevens wanneer de gebruiker de parameter List of LogName opgeeft. Als de parameter LogName is opgegeven, retourneert de cmdlet informatie over de gebeurtenissen in een bepaald gebeurtenislogboek. Als de parameter List is opgegeven, retourneert de cmdlet informatie over de logboekbestanden zelf (niet de gebeurtenisgegevens die ze bevatten). In dit geval identificeren de parameters List en LogName twee afzonderlijke parametersets.
Twee belangrijke dingen die u moet onthouden over parametersets, is dat de Windows PowerShell-runtime slechts één parameterset gebruikt voor een bepaalde invoer en dat elke parameterset ten minste één parameter moet hebben die uniek is voor die parameterset.
Ter illustratie van dit laatste punt gebruikt deze Stop-Proc cmdlet drie parametersets: ProcessName, ProcessIden InputObject. Elk van deze parametersets heeft één parameter die zich niet in de andere parametersets bevindt. De parametersets kunnen andere parameters delen, maar de cmdlet gebruikt de unieke parameters ProcessName, ProcessIden InputObject om te bepalen welke set parameters de Windows PowerShell-runtime moet gebruiken.
De cmdlet-klasse declareren
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. Voor deze cmdlet wordt het levenscycluswerkwoord 'Stoppen' gebruikt omdat de cmdlet systeemprocessen stopt. De naam van het zelfstandig naamwoord Proc wordt gebruikt omdat de cmdlet werkt op processen. In de onderstaande declaratie ziet u dat de naam van het cmdlet-werkwoord en het zelfstandig naamwoord worden weergegeven in de naam van de cmdlet-klasse.
Notitie
Zie Cmdlet Verb Namesvoor meer informatie over goedgekeurde cmdlet-werkwoordnamen.
De volgende code is de klassedefinitie voor deze Stop-Proc cmdlet.
[Cmdlet(VerbsLifecycle.Stop, "Proc",
DefaultParameterSetName = "ProcessId",
SupportsShouldProcess = true)]
public class StopProcCommand : PSCmdlet
<Cmdlet(VerbsLifecycle.Stop, "Proc", DefaultParameterSetName:="ProcessId", _
SupportsShouldProcess:=True)> _
Public Class StopProcCommand
Inherits PSCmdlet
De parameters van de cmdlet declareren
Deze cmdlet definieert drie parameters die nodig zijn als invoer voor de cmdlet (deze parameters definiëren ook de parametersets), evenals een Force parameter die beheert wat de cmdlet doet en een PassThru parameter die bepaalt of de cmdlet een uitvoerobject via de pijplijn verzendt. Deze cmdlet geeft standaard geen object door aan de pijplijn. Zie Een cmdlet maken waarmee het systeemwordt gewijzigd voor meer informatie over deze laatste twee parameters.
De naamparameter declareren
Met deze invoerparameter kan de gebruiker de namen van de processen opgeven die moeten worden gestopt. Houd er rekening mee dat het ParameterSetName kenmerkwoord van het kenmerk System.Management.Automation.ParameterAttribute kenmerk de ProcessName parameterset voor deze parameter specificeert.
[Parameter(
Position = 0,
ParameterSetName = "ProcessName",
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;
<Parameter(Position:=0, ParameterSetName:="ProcessName", _
Mandatory:=True, _
ValueFromPipeline:=True, ValueFromPipelineByPropertyName:=True, _
HelpMessage:="The name of one or more processes to stop. " & _
"Wildcards are permitted."), [Alias]("ProcessName")> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
Private processNames() As String
Houd er ook rekening mee dat de alias ProcessName wordt gegeven aan deze parameter.
De id-parameter declareren
Met deze invoerparameter kan de gebruiker de id's van de processen opgeven die moeten worden gestopt. Houd er rekening mee dat het ParameterSetName kenmerkwoord van het kenmerk System.Management.Automation.ParameterAttribute kenmerk de ProcessId parameterset aangeeft.
[Parameter(
ParameterSetName = "ProcessId",
Mandatory = true,
ValueFromPipelineByPropertyName = true,
ValueFromPipeline = true
)]
[Alias("ProcessId")]
public int[] Id
{
get { return processIds; }
set { processIds = value; }
}
private int[] processIds;
<Parameter(ParameterSetName:="ProcessId", _
Mandatory:=True, _
ValueFromPipelineByPropertyName:=True, _
ValueFromPipeline:=True), [Alias]("ProcessId")> _
Public Property Id() As Integer()
Get
Return processIds
End Get
Set(ByVal value As Integer())
processIds = value
End Set
End Property
Private processIds() As Integer
Houd er ook rekening mee dat de alias ProcessId wordt gegeven aan deze parameter.
De parameter InputObject declareren
Met deze invoerparameter kan de gebruiker een invoerobject opgeven dat informatie bevat over de processen die moeten worden gestopt. Houd er rekening mee dat het ParameterSetName kenmerkwoord van het kenmerk System.Management.Automation.ParameterAttribute kenmerk de InputObject parameterset voor deze parameter specificeert.
[Parameter(
ParameterSetName = "InputObject",
Mandatory = true,
ValueFromPipeline = true)]
public Process[] InputObject
{
get { return inputObject; }
set { inputObject = value; }
}
private Process[] inputObject;
<Parameter(ParameterSetName:="InputObject", _
Mandatory:=True, ValueFromPipeline:=True)> _
Public Property InputObject() As Process()
Get
Return myInputObject
End Get
Set(ByVal value As Process())
myInputObject = value
End Set
End Property
Private myInputObject() As Process
Houd er ook rekening mee dat deze parameter geen alias heeft.
Parameters declareren in meerdere parametersets
Hoewel er een unieke parameter moet zijn voor elke parameterset, kunnen parameters tot meer dan één parameterset behoren. Geef in deze gevallen de gedeelde parameter een System.Management.Automation.ParameterAttribute kenmerkdeclaratie voor elke set waartoe de parameter behoort. Als een parameter zich in alle parametersets bevindt, hoeft u het parameterkenmerk maar één keer te declareren en hoeft u de naam van de parameterset niet op te geven.
Een invoerverwerkingsmethode overschrijven
Elke cmdlet moet een invoerverwerkingsmethode overschrijven. Dit is meestal de methode System.Management.Automation.Cmdlet.ProcessRecord. In deze cmdlet wordt de methode System.Management.Automation.Cmdlet.ProcessRecord overschreven, zodat de cmdlet een willekeurig aantal processen kan verwerken. Het bevat een Select-instructie die een andere methode aanroept op basis van de parameterset die de gebruiker heeft opgegeven.
protected override void ProcessRecord()
{
switch (ParameterSetName)
{
case "ProcessName":
ProcessByName();
break;
case "ProcessId":
ProcessById();
break;
case "InputObject":
foreach (Process process in inputObject)
{
SafeStopProcess(process);
}
break;
default:
throw new ArgumentException("Bad ParameterSet Name");
} // switch (ParameterSetName...
} // ProcessRecord
Protected Overrides Sub ProcessRecord()
Select Case ParameterSetName
Case "ProcessName"
ProcessByName()
Case "ProcessId"
ProcessById()
Case "InputObject"
Dim process As Process
For Each process In myInputObject
SafeStopProcess(process)
Next process
Case Else
Throw New ArgumentException("Bad ParameterSet Name")
End Select
End Sub 'ProcessRecord ' ProcessRecord
De Helper-methoden die door de instructie Select worden aangeroepen, worden hier niet beschreven, maar u kunt de implementatie ervan zien in het volledige codevoorbeeld in de volgende sectie.
Codevoorbeeld
Zie StopProcessSample04 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 door een andere cmdlet wordt geleverd. 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 u deze registreren 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, test u deze door deze uit te voeren op de opdrachtregel. Hier volgen enkele tests die laten zien hoe de parameters ProcessId en InputObject kunnen worden gebruikt om hun parametersets te testen om een proces te stoppen.
Als Windows PowerShell is gestart, voert u de Stop-Proc cmdlet uit met de parameter
ProcessIdingesteld om een proces te stoppen op basis van de id. In dit geval gebruikt de cmdlet deProcessIdparameterset om het proces te stoppen.PS> Stop-Proc -Id 444 Confirm Are you sure you want to perform this action? Performing operation "Stop-Proc" on Target "notepad (444)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): YWanneer Windows PowerShell is gestart, voert u de cmdlet Stop-Proc uit met de parameter
InputObjectingesteld om processen op het Kladblok-object te stoppen dat is opgehaald door de opdrachtGet-Process.PS> Get-Process notepad | Stop-Proc Confirm Are you sure you want to perform this action? Performing operation "Stop-Proc" on Target "notepad (444)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): N
Zie ook
Een cmdlet maken waarmee het systeem wordt gewijzigd
Een Windows PowerShell-cmdlet maken
objecttypen en opmaak uitbreiden