如何在PowerShell中使用带参数集的默认值?

时间:2017-03-21 15:19:37

标签: powershell powershell-v4.0

我有这个功能

Function Do-ThisOrThat
{
[cmdletbinding()]
param (
    [Parameter(Mandatory = $false, ParameterSetName="First")]
    [string]$FirstParam = "MyFirstParam",

    [Parameter(Mandatory = $false, ParameterSetName="Second")]
    [string]$SecondParam
    )
    Write-Output "Firstparam: $FirstParam. SecondParam $SecondParam"
}

如果我调用这个函数Do-ThisOrThat,我希望它检测到$ FirstParam有一个默认值并使用它。可能吗?只有在我指定参数时才能运行它。

e.g。这有效:Do-ThisOrThat -FirstParam "Hello"

2 个答案:

答案 0 :(得分:5)

您需要告诉PowerShell您的哪个参数集是默认参数:

[cmdletbinding(DefaultParameterSetName="First")]

这将允许您在没有任何参数和Do-ThisOrThat值的情况下调用-SecondParameter,并且$FirstParam在两种情况下都将具有默认值。

但请注意,根据参数集的定义方式,如果确实指定了参数,则不能按位置 - 必须使用参数名称({{ 1}}或-FirstParam)。

答案 1 :(得分:3)

这个问题有点含糊不清。

如果要设置默认参数集,请使用DefaultParameterSetName属性中的[CmdletBinding()]属性:

[CmdletBinding(DefaultParameterSetName='First')]

另一方面,如果您想要检测并推断$FirstParam是否在脚本中具有其默认值,则可以检查已确定哪个参数集以及是否已指定FirstParam参数打电话,像这样:

if($PSCmdlet.ParameterSetName -eq 'First' -and -not $PSBoundParameters.ContainsKey('FirstParam')){ 
  <# $FirstParam has default value #> 
}