如何检查调用者是否设置了PowerShell可选参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查调用者是否设置了PowerShell可选参数相关的知识,希望对你有一定的参考价值。
我有一个脚本,它接受这些参数:
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”并检查该值是否等于此字符串,但是有更好的解决方案吗?
$PSBoundParameters
是一个类似哈希表的对象,可用于函数内部,其.Keys
属性包含调用时显式传递参数的所有参数的名称。[1]
因此,在你的情况下,$PSBoundParameters.ContainsKey('applicationToBuild')
告诉你一个参数是否传递给-applicationToBuild
(表达式评估为$True
)或不传递($False
)。
注意:这种方法的优点是明确的,而测试参数变量类型的默认值,如trbox' answer,不允许您区分不传递参数和显式传递类型的默认值(空字符串) , 在这种情况下)。
[1]注意,不包括通过默认值隐式绑定的参数;包括后者在将参数传递给另一个函数时会有所帮助,如this GitHub issue中所述。
如果没有任何内容传递给脚本,$applicationToBuild
是一个空字符串,因为参数的类型是[String]
。
因此,如果参数“未设置”,$applicationToBuild.Length
将是0
。
您可以在决定是否使用参数时使用它。
Here是将param类型指定为开关的另一种选择
以上是关于如何检查调用者是否设置了PowerShell可选参数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Chrome 中为 WebRTC 调用者设置远程描述而不会出错?