Parámetros dinámicos del 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 agrega varios parámetros solo cuando se especifica un parámetro switch 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 y agregan un Get-Item Get-ChildItem parámetro CodeSigningCert en tiempo de ejecución cuando el parámetro Path especifica la ruta de acceso del proveedor de certificados. Si el parámetro Path especifica una ruta de acceso para otro proveedor, 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 Get-Item se ejecuta .

En este ejemplo, el tiempo de ejecución de PowerShell ha agregado el parámetro y el cmdlet es correcto.

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, se deben incluir los siguientes elementos 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 Alias y Validation opcional que necesite 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, vea Cómo declarar parámetros dinámicos.

Consulte también

System.Management.Automation.IDynamicParameters

System.Management.Automation.IDynamicParameters.GetDynamicParameters

Cómo declarar los parámetros dinámicos

Escribir un cmdlet de Windows PowerShell