Dela via


Dynamiska cmdlet-parametrar

Cmdletar kan definiera parametrar som är tillgängliga för användaren under särskilda förhållanden, 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.

Anmärkning

Providers och PowerShell-funktioner kan också definiera dynamiska parametrar.

Dynamiska parametrar i PowerShell-cmdletar

PowerShell använder dynamiska parametrar i flera av sina provider-cmdletar. Cmdletarna Get-Item och Get-ChildItem lägger till en CodeSigningCert- parameter vid körning när parametern Path anger Certifikat providersökväg. 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 när Get-Item körs.

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

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 inkluderas i cmdlet-koden.

Gränssnitt

System.Management.Automation.IDynamicParameters. Det här gränssnittet innehåller den metod som hämtar de dynamiska parametrarna.

Till exempel:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Metod

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Den här metoden hämtar objektet som innehåller definitionerna för dynamiska parametrar.

Till 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 Parameter-attribut för varje parameter och valfria alias och validering attribut som krävs av cmdleten.

Till 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