使用DynamicParam创建开关参数

时间:2015-06-29 10:14:59

标签: powershell

是否可以使用[switch]创建类似DynamicParam的参数?我知道我可以创建一个布尔参数,但在这种情况下,我将被迫初始化其值-BooParam $true,但我只想输入-BooParam。为什么我需要它 - 如果定义了第二个,我想使用Tab公开一个开关参数。

2 个答案:

答案 0 :(得分:1)

是的,可以使用DynamicParam:

function Test-Function
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$false)]
        [switch]$flag1

    )

    DynamicParam 
    {
         if ($flag1) 
         {
              $flag2 = New-Object System.Management.Automation.ParameterAttribute
              $flag2.Mandatory = $false
              $flag2.HelpMessage = "Only available if flag1 is set"

              $attributeCollection = new-object System.Collections.ObjectModel.Collection[System.Attribute]              
              $attributeCollection.Add($flag2)

              $flag2param = New-Object System.Management.Automation.RuntimeDefinedParameter('flag2', [switch], $attributeCollection)

              $paramDictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary
              $paramDictionary.Add('flag2', $flag2param)
              return $paramDictionary
        }
    }
}

答案 1 :(得分:1)

Parameter sets可能是实现目标的更好(更简单)的方法。

function Do-Something {
  [CmdletBinding(DefaultParameterSetName='none')]
  Param(
    ...
    [Parameter(ParameterSetName='set1', Mandatory=$true)]$Foo,
    [Parameter(ParameterSetName='set1')][Switch]$Bar
  )

  ...
}