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. Beispielsweise können Sie ein Cmdlet entwerfen, das nur dann mehrere Parameter hinzufügt, wenn ein bestimmter switch-Parameter 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 Get-Item Cmdlets und Get-ChildItem zur Laufzeit einen CodeSigningCert-Parameter hinzu, wenn der Path-Parameter den Pfad des Zertifikatanbieters angibt. Wenn der Path-Parameter 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-Runtime 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 es wird 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 dynamischer Parameter

Um dynamische Parameter zu unterstützen, müssen die folgenden Elemente im Cmdlet-Code enthalten sein.

Schnittstelle

System.Management.Automation.IDynamicParameters. Diese Schnittstelle stellt die Methode bereit, die die dynamischen Parameter abruft.

Beispiel:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Methode

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

Beispiele:

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

Klasse

Eine Klasse, die die dynamischen Parameter definiert, die hinzugefügt werden sollen. Diese Klasse muss ein Parameter-Attribut für jeden Parameter und alle optionalen Alias- und Validierungsattribute 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 Deklarieren von dynamischen Parametern.

Weitere Informationen

System.Management.Automation.IDynamicParameters

System.Management.Automation.IDynamicParameters.GetDynamicParameters

Deklarieren von dynamischen Parametern

Schreiben eines Windows PowerShell-Cmdlets