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