Cmdlet 参数集

PowerShell 使用参数集来编写单个 cmdlet,该 cmdlet 可以针对不同的方案执行不同的操作。 参数集允许向用户公开不同的参数。 并且,根据用户指定的参数返回不同的信息。

参数集的示例

例如,PowerShell cmdlet 根据用户是否指定 List 或 Get-EventLog LogName 参数返回不同的信息。 如果 指定了 List 参数,则 cmdlet 将返回有关日志文件本身的信息,但不返回它们包含的事件信息。 如果 指定了 LogName 参数,则 cmdlet 将返回有关特定事件日志中的事件的信息。 List LogName 参数标识两个单独的参数集。

唯一参数

每个参数集必须具有 PowerShell 运行时用来公开相应参数集的唯一参数。 如果可能,唯一参数应为必需参数。 当参数是必需的时,用户必须指定 参数,并且 PowerShell 运行时使用该参数来标识参数集。 如果 cmdlet 设计为在不指定任何参数的情况下运行,则唯一参数不是必需的。

多个参数集

下图中的左列显示三个有效的参数集。 参数 A 对于第一个参数集是唯一的, 参数 B 对于第二个参数集是唯一的,参数 C 对于第三个参数集是唯一的。 在右侧列中,参数集没有唯一参数。

参数集的插图

参数集要求

以下要求适用于所有参数集。

  • 每个参数集必须至少有一个唯一参数。 如果可能,请使此参数成为必需参数。

  • 包含多个位置参数的参数集必须为每个参数定义唯一位置。 两个位置参数不能指定同一位置。

  • 一个集合中只有一个参数 ValueFromPipeline 可以声明值为 的 关键字 true 。 多个参数可以定义值为 ValueFromPipelineByPropertyName 的 关键字 true

  • 如果没有为参数指定参数集,则参数属于所有参数集。

备注

对于 cmdlet 或函数,限制为 32 个参数集。

默认参数集

定义多个参数集时,可以使用 DefaultParameterSetName Cmdlet 属性的 关键字指定默认参数集。 如果 PowerShell 无法根据命令提供的信息确定要使用的参数集,则使用默认参数集。 有关 Cmdlet 属性详细信息 ,请参阅 Cmdlet 属性声明

声明参数集

若要创建参数集,必须在声明参数集内每个参数的 Parameter 属性时 ParameterSetName 指定 关键字。 对于属于多个参数集的参数, 请为每个 参数集添加 Parameter 属性。 此属性使你能够为每个参数集以不同方式定义参数。 例如,可以在一个集内将参数定义为必需参数,在另一个集内将参数定义为可选参数。 但是,每个参数集必须包含一个唯一参数。 有关详细信息,请参阅参数 属性声明

在下面的示例中 ,UserName 参数是参数集的唯一参数 Test01 ,ComputerName 参数是参数集的唯 Test02 一参数。 SharedParam 参数属于这两个集,对于参数集是必需的,但对于参数集 Test01 Test02 是可选的。

[Parameter(Position = 0, Mandatory = true, ParameterSetName = "Test01")]
public string UserName
{
  get { return userName; }
  set { userName = value; }
}
private string userName;

[Parameter(Position = 0, Mandatory = true, ParameterSetName = "Test02")]
public string ComputerName
{
  get { return computerName; }
  set { computerName = value; }
}
private string computerName;

[Parameter(Mandatory= true, ParameterSetName = "Test01")]
[Parameter(ParameterSetName = "Test02")]
public string SharedParam
{
    get { return sharedParam; }
    set { sharedParam = value; }
}
private string sharedParam;