我有一个带有这些参数的脚本:
param (
[parameter(Mandatory=$true)][ValidateRange(1, [int]::MaxValue)]
[Int]$startRevision,
[parameter(Mandatory=$true)][ValidateRange(1, [int]::MaxValue)]
[Int]$endRevision,
[parameter(Mandatory=$false)][ValidateRange(1, [int]::MaxValue)]
[Int]$stepSize = 10,
[parameter(Mandatory=$false)]
[String]$applicationToBuild
)
由于最后一个参数是可选的,我想知道参数是否已设置。有没有办法做到这一点?
默认设置不正常,因为如果没有设置变量,我不想使用它。我可以使用默认值“ThisIsNotSet”并检查该值是否等于此字符串,但是有更好的解决方案吗?
答案 0 :(得分:17)
$PSBoundParameters
是类似哈希表的对象,其 .Keys
属性包含参数所有参数的名称在调用时被明确传递。 [1]
因此,在您的情况下,$PSBoundParameters.ContainsKey('applicationToBuild')
会告诉您参数是否传递给-applicationToBuild
(表达式计算结果为$True
)或不传递($False
)。
注意:此方法的优点是明确,而测试参数变量类型的默认值(如trbox' answer中所示)并非如此允许您区分不传递参数和显式传递类型的默认值(在这种情况下为空字符串)。
[1]请注意,通过默认值隐式绑定的参数不包含 ;包括后者在将参数传递给另一个函数时会有所帮助,如this GitHub issue中所述。
答案 1 :(得分:0)
$applicationToBuild
为空字符串,因为参数的类型为[String]
。
因此,如果参数“未设置”,则$applicationToBuild.Length
将为0
。
您可以在决定是否使用参数时使用它。
答案 2 :(得分:0)
Here的另一种选择,通过将参数类型指定为开关