Compartilhar via


Parâmetros dinâmicos de cmdlet

Os cmdlets podem definir parâmetros que estão disponíveis para o usuário em condições especiais, como quando o argumento de outro parâmetro é um valor específico. Esses parâmetros são adicionados em runtime e são chamados de parâmetros dinâmicos porque são adicionados somente quando necessário. Por exemplo, você pode projetar um cmdlet que adiciona vários parâmetros somente quando um parâmetro de comutador específico é especificado.

Observação

Provedores e funções do PowerShell também podem definir parâmetros dinâmicos.

Parâmetros dinâmicos em cmdlets do PowerShell

O PowerShell usa parâmetros dinâmicos em vários de seus cmdlets de provedor. Por exemplo, os cmdlets Get-Item e Get-ChildItem adicionam um parâmetro CodeSigningCert em runtime quando o parâmetro Path especifica o caminho do provedor Certificate. Se o parâmetro Path especificar um caminho para um provedor diferente, o parâmetro CodeSigningCert não estará disponível.

Os exemplos a seguir mostram como o parâmetro CodeSigningCert é adicionado em runtime quando Get-Item é executado.

Neste exemplo, o runtime do PowerShell adicionou o parâmetro e o cmdlet foi bem-sucedido.

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

Neste exemplo, uma unidade FileSystem é especificada e um erro é retornado. A mensagem de erro indica que o parâmetro CodeSigningCert não pode ser encontrado.

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

Suporte para parâmetros dinâmicos

Para dar suporte a parâmetros dinâmicos, os seguintes elementos devem ser incluídos no código do cmdlet.

Interface

System.Management.Automation.IDynamicParameters . Essa interface fornece o método que recupera os parâmetros dinâmicos.

Por exemplo:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Método

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Esse método recupera o objeto que contém as definições de parâmetro dinâmico.

Por exemplo:

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

Classe

Uma classe que define os parâmetros dinâmicos a serem adicionados. Essa classe deve incluir um atributo Parameter para cada parâmetro e quaisquer atributos opcionais Alias e Validation necessários para o cmdlet.

Por exemplo:

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

Para obter um exemplo completo de um cmdlet que dá suporte a parâmetros dinâmicos, consulte How to Declare Dynamic Parameters.

Consulte também