Udostępnij za pomocą


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ą określane jako parametry dynamiczne, ponieważ są dodawane tylko w razie potrzeby. Można na przykład zaprojektować polecenie cmdlet, które dodaje kilka parametrów tylko wtedy, gdy określony parametr przełącznika jest określony.

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 Get-Item i Get-ChildItem dodają parametr CodeSigningCert w czasie wykonywania, gdy parametr ścieżka określa ścieżkę dostawcy certyfikatu. Jeśli parametr ścieżka określa ścieżkę innego dostawcy, parametr CodeSigningCert jest niedostępny.

W poniższych przykładach pokazano, jak parametr CodeSigningCert jest dodawany w czasie wykonywania po uruchomieniu Get-Item.

W tym przykładzie środowisko uruchomieniowe programu PowerShell dodało parametr i polecenie cmdlet zakończyło się pomyślnie.

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

W tym przykładzie określono dysk FileSystem i zwracany jest 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 obsługiwać parametry dynamiczne, należy uwzględnić następujące elementy w kodzie polecenia cmdlet.

Interfejs

System.Management.Automation.IDynamicParameters. Ten interfejs udostępnia metodę pobierającą parametry dynamiczne.

Na przykład:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Metoda

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Ta metoda pobiera obiekt zawierający 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 parametru dla każdego parametru oraz opcjonalny alias i atrybuty weryfikacji weryfikacji 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;
}

Pełny przykład polecenia cmdlet obsługującego parametry dynamiczne można znaleźć w Jak zadeklarować parametry dynamiczne.

Zobacz też