Parametri dinamici dei cmdlet

I cmdlet possono definire parametri disponibili per l'utente in condizioni speciali, ad esempio quando l'argomento di un altro parametro è un valore specifico. Questi parametri vengono aggiunti in fase di esecuzione e vengono definiti parametri dinamici perché vengono aggiunti solo quando necessario. Ad esempio, è possibile progettare un cmdlet che aggiunge diversi parametri solo quando viene specificato un parametro switch specifico.

Nota

I provider e le funzioni di PowerShell possono anche definire parametri dinamici.

Parametri dinamici nei cmdlet di PowerShell

PowerShell usa parametri dinamici in diversi cmdlet del provider. Ad esempio, i Get-Item cmdlet e Get-ChildItem aggiungono un parametro CodeSigningCert in fase di esecuzione quando il parametro Path specifica il percorso del provider di certificati. Se il parametro Path specifica un percorso per un provider diverso, il parametro CodeSigningCert non è disponibile.

Gli esempi seguenti illustrano come il parametro CodeSigningCert viene aggiunto in fase di esecuzione quando Get-Item viene eseguito .

In questo esempio il runtime di PowerShell ha aggiunto il parametro e il cmdlet ha esito positivo.

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

In questo esempio viene specificata un'unità FileSystem e viene restituito un errore. Il messaggio di errore indica che non è possibile trovare il parametro CodeSigningCert.

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

Supporto per i parametri dinamici

Per supportare i parametri dinamici, è necessario includere gli elementi seguenti nel codice del cmdlet.

Interfaccia

System.Management.Automation.IDynamicParameters. Questa interfaccia fornisce il metodo che recupera i parametri dinamici.

Ad esempio:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Metodo

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Questo metodo recupera l'oggetto che contiene le definizioni dei parametri dinamici.

Ad esempio:

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

Classe

Classe che definisce i parametri dinamici da aggiungere. Questa classe deve includere un attributo Parameter per ogni parametro ed eventuali attributi alias e di convalida facoltativi necessari per il cmdlet.

Ad esempio:

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

Per un esempio completo di un cmdlet che supporta parametri dinamici, vedere How to Declare Dynamic Parameters.

Vedi anche

System.Management.Automation.IDynamicParameters

System.Management.Automation.IDynamicParameters.GetDynamicParameters

Come dichiarare i parametri dinamici

Scrittura di un cmdlet di Windows PowerShell