Dynamiska cmdlet-parametrar

Cmdlets kan definiera parametrar som är tillgängliga för användaren under särskilda villkor, till exempel när argumentet för en annan parameter är ett specifikt värde. Dessa parametrar läggs till vid körning och kallas dynamiska parametrar eftersom de bara läggs till när det behövs. Du kan till exempel utforma en cmdlet som bara lägger till flera parametrar när en specifik växelparameter har angetts.

Anteckning

Leverantörer och PowerShell-funktioner kan också definiera dynamiska parametrar.

Dynamiska parametrar i PowerShell-cmdlets

PowerShell använder dynamiska parametrar i flera av sina provider-cmdlets. Cmdletarna och lägger till exempel till en Get-Item Get-ChildItem CodeSigningCert-parameter vid körning när parametern Path anger sökvägen för certifikatprovidern. Om parametern Path anger en sökväg för en annan provider är parametern CodeSigningCert inte tillgänglig.

I följande exempel visas hur parametern CodeSigningCert läggs till vid körning Get-Item när körs.

I det här exemplet har PowerShell-körningen lagt till parametern och cmdleten har lyckats.

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

I det här exemplet anges en FileSystem-enhet och ett fel returneras. Felmeddelandet anger att parametern CodeSigningCert inte kan hittas.

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

Stöd för dynamiska parametrar

För att stödja dynamiska parametrar måste följande element ingå i cmdlet-koden.

Gränssnitt

System.Management.Automation.IDynamicParameters. Det här gränssnittet tillhandahåller metoden som hämtar de dynamiska parametrarna.

Exempel:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Metod

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Den här metoden hämtar objektet som innehåller de dynamiska parameterdefinitionerna.

Exempel:

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

Klass

En klass som definierar de dynamiska parametrar som ska läggas till. Den här klassen måste innehålla ett parameterattribut för varje parameter och eventuella valfria alias- och valideringsattribut som krävs av cmdleten.

Exempel:

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

Ett fullständigt exempel på en cmdlet som stöder dynamiska parametrar finns i Deklarera dynamiska parametrar.

Se även

System.Management.Automation.IDynamicParameters

System.Management.Automation.IDynamicParameters.GetDynamicParameters

Deklarera dynamiska parametrar

Skriva en Windows PowerShell-cmdlet