Поделиться через


Динамические параметры командлета

Командлеты могут определять параметры, доступные пользователю в особых условиях, например, если аргумент другого параметра является определенным значением. Эти параметры добавляются во время выполнения и называются динамическими параметрами, так как они добавляются только при необходимости. Например, можно создать командлет, добавляющий несколько параметров, только если указан конкретный [switch] параметр.

Замечание

Поставщики и функции PowerShell также могут определять динамические параметры.

Динамические параметры в командлетах PowerShell

PowerShell использует динамические параметры в нескольких командлетах поставщика. Например, командлеты добавляют параметр CodeSigningCert во время выполнения, Get-ItemGet-ChildItem когда параметр Path указывает путь поставщика сертификата. Если параметр Path указывает путь для другого поставщика, параметр CodeSigningCert недоступен.

В следующих примерах показано, как параметр CodeSigningCert добавляется во время выполнения.Get-Item

В этом примере среда выполнения PowerShell добавила параметр и командлет успешно выполнен.

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

В этом примере указан диск FileSystem и возвращается ошибка. Сообщение об ошибке указывает, что не удается найти параметр 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

Поддержка динамических параметров

Для поддержки динамических параметров в код командлета необходимо включить следующие элементы.

Интерфейс

System.Management.Automation.IDynamicParameters. Этот интерфейс предоставляет метод, который получает динамические параметры.

Рассмотрим пример.

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Метод

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Этот метод извлекает объект, содержащий определения динамических параметров.

Рассмотрим пример.

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

Класс

Класс, определяющий добавляемые динамические параметры. Этот класс должен включать атрибут Parameter для каждого параметра и любые необязательные атрибуты Псевдонима и проверки , необходимые командлету.

Рассмотрим пример.

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

Полный пример командлета, поддерживающего динамические параметры, см. в разделе "Объявление динамических параметров".

См. также