如何声明动态参数
此示例演示如何定义在运行时添加到 cmdlet 的动态参数。 此示例中,每当用户指定 switch 参数时,都会将 参数 Department
添加到 Employee
cmdlet。 有关动态参数的信息,请参阅 Cmdlet 动态参数。
定义动态参数
在 cmdlet 类声明中,添加 System.Management.Automation.Idynamicparameters 接口,如下所示。
public class SendGreetingCommand : Cmdlet, IDynamicParameters
调用 System.Management.Automation.Idynamicparameters.Getdynamicparameters* 方法,该方法返回定义动态参数的对象。 本示例指定 参数时调用
Employee
方法。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; }
示例
此示例中, Department
每当用户指定 参数时,都会添加 Employee
参数。 参数 Department
是可选参数,ValidateSet 属性用于指定允许的参数。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation; // PowerShell assembly.
namespace SendGreeting
{
// Declare the cmdlet class that supports the
// IDynamicParameters interface.
[Cmdlet(VerbsCommunications.Send, "Greeting")]
public class SendGreetingCommand : Cmdlet, IDynamicParameters
{
// Declare the parameters for the cmdlet.
[Parameter(Mandatory = true)]
public string Name
{
get { return name; }
set { name = value; }
}
private string name;
[Parameter]
[Alias ("FTE")]
public SwitchParameter Employee
{
get { return employee; }
set { employee = value; }
}
private Boolean employee;
// Implement GetDynamicParameters to
// retrieve the dynamic parameter.
public object GetDynamicParameters()
{
if (employee)
{
context= new SendGreetingCommandDynamicParameters();
return context;
}
return null;
}
private SendGreetingCommandDynamicParameters context;
// Overide the ProcessRecord method to process the
// supplied user name and write out a greeting to
// the user by calling the WriteObject method.
protected override void ProcessRecord()
{
WriteObject("Hello " + name + "! ");
if (employee)
{
WriteObject("Department: " + context.Department);
}
}
}
// Define the dynamic parameters to be added
public class SendGreetingCommandDynamicParameters
{
[Parameter]
[ValidateSet ("Marketing", "Sales", "Development")]
public string Department
{
get { return department; }
set { department = value; }
}
private string department;
}
}
另请参阅
System.Management.Automation.Runtimedefinedparameterdictionary
System.Management.Automation.Idynamicparameters.Getdynamicparameters*
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈