Parametry dynamiczne polecenia cmdlet

Polecenia cmdlet mogą definiować parametry, które są dostępne dla użytkownika w specjalnych warunkach, na przykład gdy argument innego parametru jest określoną wartością. Te parametry są dodawane w czasie wykonywania i są nazywane parametrami dynamicznymi, ponieważ są dodawane tylko w razie potrzeby. Na przykład można zaprojektować polecenie cmdlet, które dodaje kilka parametrów tylko wtedy, gdy określono określony parametr przełącznika.

Uwaga

Dostawcy i funkcje programu PowerShell mogą również definiować parametry dynamiczne.

Parametry dynamiczne w poleceniach cmdlet programu PowerShell

Program PowerShell używa parametrów dynamicznych w kilku poleceniach cmdlet dostawcy. Na przykład polecenia cmdlet i dodają Get-Item Get-ChildItem parametr CodeSigningCert w czasie wykonywania, gdy parametr Ścieżka określa ścieżkę dostawcy certyfikatów. Jeśli ścieżka parametr określa ścieżkę dla innego dostawcy, parametr CodeSigningCert nie jest dostępny.

Poniższe przykłady pokazują, jak parametr CodeSigningCert jest dodawany w czasie wykonywania Get-Item po uruchomieniu.

W tym przykładzie środowisko uruchomieniowe programu PowerShell dodało parametr , a polecenie cmdlet zostało pomyślnie dodane.

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

W tym przykładzie określono dysk FileSystem i zostanie zwrócony błąd. Komunikat o błędzie wskazuje, że nie można odnaleźć parametru 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

Obsługa parametrów dynamicznych

Aby zapewnić obsługę parametrów dynamicznych, w kodzie polecenia cmdlet muszą znajdować się następujące elementy.

Interfejs

System.Management.Automation.IDynamicParameters. Ten interfejs udostępnia metodę , która pobiera parametry dynamiczne.

Na przykład:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Metoda

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Ta metoda pobiera obiekt, który zawiera definicje parametrów dynamicznych.

Na przykład:

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

Klasa

Klasa, która definiuje parametry dynamiczne do dodania. Ta klasa musi zawierać atrybut Parameter dla każdego parametru oraz wszelkie opcjonalne atrybuty aliasu i walidacji, które są wymagane przez polecenie cmdlet.

Na przykład:

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

Aby uzyskać kompletny przykład polecenia cmdlet obsługującego parametry dynamiczne, zobacz Jak zadeklarować parametry dynamiczne.

Zobacz też

System.Management.Automation.IDynamicParameters

System.Management.Automation.IDynamicParameters.GetDynamicParameters

Jak zadeklarować parametry dynamiczne

Pisanie polecenia cmdlet programu Windows PowerShell