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