Freigeben über


Dynamische Cmdlet-Parameter

Cmdlets können Parameter definieren, die dem Benutzer unter besonderen Bedingungen zur Verfügung stehen, z. B. wenn das Argument eines anderen Parameters ein bestimmter Wert ist. Diese Parameter werden zur Laufzeit hinzugefügt und als dynamische Parameter bezeichnet, da sie nur bei Bedarf hinzugefügt werden. Sie können beispielsweise ein Cmdlet entwerfen, das nur dann mehrere Parameter hinzufügt, wenn ein bestimmter Switchparameter angegeben wird.

Hinweis

Anbieter und PowerShell-Funktionen können auch dynamische Parameter definieren.

Dynamische Parameter in PowerShell-Cmdlets

PowerShell verwendet dynamische Parameter in mehreren seiner Anbieter-Cmdlets. Beispielsweise fügen die Cmdlets Get-Item und Get-ChildItem zur Laufzeit einen CodeSigningCert Parameter hinzu, wenn der parameter Path den Zertifikat Anbieterpfad angibt. Wenn der parameter Path einen Pfad für einen anderen Anbieter angibt, ist der CodeSigningCert Parameter nicht verfügbar.

Die folgenden Beispiele zeigen, wie der CodeSigningCert Parameter zur Laufzeit hinzugefügt wird, wenn Get-Item ausgeführt wird.

In diesem Beispiel hat die PowerShell-Laufzeit den Parameter hinzugefügt, und das Cmdlet ist erfolgreich.

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

In diesem Beispiel wird ein FileSystem- Laufwerk angegeben und ein Fehler zurückgegeben. Die Fehlermeldung gibt an, dass der CodeSigningCert Parameter nicht gefunden werden kann.

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

Unterstützung für dynamische Parameter

Zur Unterstützung dynamischer Parameter müssen die folgenden Elemente im Cmdlet-Code enthalten sein.

Schnittstelle

System.Management.Automation.IDynamicParameters. Diese Schnittstelle stellt die Methode bereit, mit der die dynamischen Parameter abgerufen werden.

Beispiel:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Methode

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Diese Methode ruft das Objekt ab, das die dynamischen Parameterdefinitionen enthält.

Beispiel:

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

Klasse

Eine Klasse, die die hinzuzufügenden dynamischen Parameter definiert. Diese Klasse muss ein Parameter-attribut für jeden Parameter und alle optionalen Alias und Validation Attribute enthalten, die vom Cmdlet benötigt werden.

Beispiel:

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

Ein vollständiges Beispiel für ein Cmdlet, das dynamische Parameter unterstützt, finden Sie unter How to Declare Dynamic Parameters.

Siehe auch