Delen via


Dynamische parameters voor cmdlets

Cmdlets kunnen parameters definiƫren die beschikbaar zijn voor de gebruiker onder speciale voorwaarden, zoals wanneer het argument van een andere parameter een specifieke waarde is. Deze parameters worden tijdens runtime toegevoegd en worden dynamische parameters genoemd, omdat ze alleen worden toegevoegd wanneer dat nodig is. U kunt bijvoorbeeld een cmdlet ontwerpen die alleen verschillende parameters toevoegt wanneer een specifieke switchparameter is opgegeven.

Notitie

Providers en PowerShell-functies kunnen ook dynamische parameters definiƫren.

Dynamische parameters in PowerShell-cmdlets

PowerShell maakt gebruik van dynamische parameters in verschillende provider-cmdlets. De cmdlets Get-Item en Get-ChildItem voegen bijvoorbeeld tijdens runtime een parameter CodeSigningCert toe wanneer de parameter Path het pad Certificate provider specificeert. Als de parameter Pad een pad voor een andere provider opgeeft, is de parameter CodeSigningCert niet beschikbaar.

In de volgende voorbeelden ziet u hoe de parameter CodeSigningCert tijdens runtime wordt toegevoegd wanneer Get-Item wordt uitgevoerd.

In dit voorbeeld heeft de PowerShell-runtime de parameter toegevoegd en is de cmdlet geslaagd.

Get-Item -Path Cert:\CurrentUser -CodeSigningCert
Location   : CurrentUser
StoreNames : {SmartCardRoot, UserDS, AuthRoot, CA...}

In dit voorbeeld wordt een bestandssysteem station opgegeven en wordt er een fout geretourneerd. Het foutbericht geeft aan dat de parameter CodeSigningCert niet kan worden gevonden.

Get-Item -Path C:\ -CodeSigningCert
Get-Item : A parameter cannot be found that matches parameter name 'CodeSigningCert'.
At line:1 char:37
+  Get-Item -Path C:\ -CodeSigningCert <<<<
--------
    CategoryInfo          : InvalidArgument: (:) [Get-Item], ParameterBindingException
    FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetItemCommand

Ondersteuning voor dynamische parameters

Ter ondersteuning van dynamische parameters moeten de volgende elementen worden opgenomen in de cmdlet-code.

gebruikersinterface

System.Management.Automation.IDynamicParameters. Deze interface biedt de methode waarmee de dynamische parameters worden opgehaald.

Voorbeeld:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Methode

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Met deze methode wordt het object opgehaald dat de dynamische parameterdefinities bevat.

Voorbeeld:

 public object GetDynamicParameters()
 {
   if (employee)
   {
     context= new SendGreetingCommandDynamicParameters();
     return context;
   }
   return null;
}
private SendGreetingCommandDynamicParameters context;

Klasse

Een klasse die de dynamische parameters definieert die moeten worden toegevoegd. Deze klasse moet een parameter kenmerk bevatten voor elke parameter en eventuele optionele Alias- en Validatie kenmerken die nodig zijn voor de cmdlet.

Voorbeeld:

public class SendGreetingCommandDynamicParameters
{
  [Parameter]
  [ValidateSet ("Marketing", "Sales", "Development")]
  public string Department
  {
    get { return department; }
    set { department = value; }
  }
  private string department;
}

Zie Dynamische parameters declarerenvoor een volledig voorbeeld van een cmdlet die dynamische parameters ondersteunt.

Zie ook