Compartir a través de


Parámetros dinámicos de cmdlet

Los cmdlets pueden definir parámetros que están disponibles para el usuario en condiciones especiales, como cuando el argumento de otro parámetro es un valor específico. Estos parámetros se agregan en tiempo de ejecución y se conocen como parámetros dinámicos porque solo se agregan cuando es necesario. Por ejemplo, puede diseñar un cmdlet que agregue varios parámetros solo cuando se especifica un parámetro de modificador específico.

Nota:

Los proveedores y las funciones de PowerShell también pueden definir parámetros dinámicos.

Parámetros dinámicos en cmdlets de PowerShell

PowerShell usa parámetros dinámicos en varios de sus cmdlets de proveedor. Por ejemplo, los cmdlets Get-Item y Get-ChildItem agregan un parámetro CodeSigningCert en tiempo de ejecución cuando el parámetro Path de especifica la ruta de acceso del proveedor de Certificate. Si el parámetro Path de especifica una ruta de acceso para un proveedor diferente, el parámetro CodeSigningCert no está disponible.

En los ejemplos siguientes se muestra cómo se agrega el parámetro CodeSigningCert en tiempo de ejecución cuando se ejecuta Get-Item.

En este ejemplo, el entorno de ejecución de PowerShell ha agregado el parámetro y el cmdlet se realiza correctamente.

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

En este ejemplo, se especifica una unidad FileSystem y se devuelve un error. El mensaje de error indica que no se encuentra el parámetro 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

Compatibilidad con parámetros dinámicos

Para admitir parámetros dinámicos, los siguientes elementos deben incluirse en el código del cmdlet.

Interfaz

System.Management.Automation.IDynamicParameters. Esta interfaz proporciona el método que recupera los parámetros dinámicos.

Por ejemplo:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Método

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Este método recupera el objeto que contiene las definiciones de parámetros dinámicos.

Por ejemplo:

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

Clase

Clase que define los parámetros dinámicos que se van a agregar. Esta clase debe incluir un atributo Parameter para cada parámetro y cualquier atributo opcional Alias y Validation atributos necesarios por el cmdlet.

Por ejemplo:

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

Para obtener un ejemplo completo de un cmdlet que admite parámetros dinámicos, consulte Cómo declarar parámetros dinámicos.

Consulte también