Cmdlet 可以定义特殊条件下可供用户使用的参数,例如,当另一个参数的参数是特定值时。 这些参数在运行时添加,称为动态参数,因为它们仅在需要时才添加。 例如,可以设计仅在指定特定开关参数时添加多个参数的 cmdlet。
注释
提供程序和 PowerShell 函数还可以定义动态参数。
PowerShell cmdlet 中的动态参数
PowerShell 在其多个提供程序 cmdlet 中使用动态参数。 例如,当 Path 参数指定 证书 提供程序路径时,Get-Item
和 Get-ChildItem
cmdlet 在运行时添加 CodeSigningCert 参数。 如果 Path 参数指定其他提供程序的路径,则 CodeSigningCert 参数不可用。
以下示例演示运行 Get-Item
时如何在运行时添加 CodeSigningCert 参数。
在此示例中,PowerShell 运行时添加了参数,并且 cmdlet 成功。
Get-Item -Path Cert:\CurrentUser -CodeSigningCert
Location : CurrentUser
StoreNames : {SmartCardRoot, UserDS, AuthRoot, CA...}
在此示例中,指定了 FileSystem 驱动器,并返回错误。 错误消息指示找不到 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
支持动态参数
若要支持动态参数,必须在 cmdlet 代码中包括以下元素。
接口
System.Management.Automation.IDynamicParameters。 此接口提供检索动态参数的方法。
例如:
public class SendGreetingCommand : Cmdlet, IDynamicParameters
方法
System.Management.Automation.IDynamicParameters.GetDynamicParameters。 此方法检索包含动态参数定义的对象。
例如:
public object GetDynamicParameters()
{
if (employee)
{
context= new SendGreetingCommandDynamicParameters();
return context;
}
return null;
}
private SendGreetingCommandDynamicParameters context;
班级
定义要添加的动态参数的类。 此类必须包括每个参数的 参数 属性以及 cmdlet 所需的任何可选 别名 和 验证 属性。
例如:
public class SendGreetingCommandDynamicParameters
{
[Parameter]
[ValidateSet ("Marketing", "Sales", "Development")]
public string Department
{
get { return department; }
set { department = value; }
}
private string department;
}
有关支持动态参数的 cmdlet 的完整示例,请参阅 如何声明动态参数。