我有这个功能
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"
答案 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 #>
}