Partilhar via


Parâmetros dinâmicos do cmdlet

Os cmdlets podem definir parâmetros que estão disponíveis para o usuário sob condições especiais, como quando o argumento de outro parâmetro é um valor específico. Esses parâmetros são adicionados em tempo de execução e são chamados de parâmetros dinâmicos porque só são adicionados quando necessário. Por exemplo, você pode criar um cmdlet que adiciona vários parâmetros somente quando um parâmetro de switch 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 tempo de execução 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 tempo de execução quando Get-Item é executado.

Neste exemplo, o tempo de execução 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 oferecer suporte a parâmetros dinâmicos, os seguintes elementos devem ser incluídos no código do cmdlet.

Interfaz

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âmetros dinâmicos.

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 todos os 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 oferece suporte a parâmetros dinâmicos, consulte Como declarar parâmetros dinâmicos.

Ver também