Cmdlet 动态参数
Cmdlet 可以定义在特殊条件下(例如,当另一个参数的 参数是特定值时)可供用户使用的参数。 这些参数在运行时添加,并称为动态参数,因为它们仅在需要时添加。 例如,可以设计一个 cmdlet,该 cmdlet 仅在指定特定开关参数时添加多个参数。
备注
提供程序和 PowerShell 函数还可以定义动态参数。
PowerShell cmdlet 中的动态参数
PowerShell 在其多个提供程序 cmdlet 中使用动态参数。 例如,当 Path 参数指定证书提供程序路径时, 和 cmdlet 将在运行时添加 Get-Item
Get-ChildItem
CodeSigningCert 参数。 如果 Path 参数指定其他提供程序的路径 ,CodeSigningCert 参数将不可用。
以下示例显示在运行时 运行时如何添加 CodeSigningCert Get-Item
参数。
此示例中,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;
类
定义要添加的动态参数的类。 此类必须包含每个 参数的 Parameter 属性以及 cmdlet 所需的任何可选 Alias 和 Validation 属性。
例如:
public class SendGreetingCommandDynamicParameters
{
[Parameter]
[ValidateSet ("Marketing", "Sales", "Development")]
public string Department
{
get { return department; }
set { department = value; }
}
private string department;
}
有关支持动态参数的 cmdlet 的完整示例,请参阅 如何声明动态参数。
另请参阅
System.Management.Automation.IDynamicParameters
System.Management.Automation.IDynamicParameters.GetDynamicParameters
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈