如何检查调用者是否设置了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可选参数的主要内容,如果未能解决你的问题,请参考以下文章

如何检查是不是设置了可选功能参数

使用 gdb 检查调用者帧

如何使用堆栈跟踪或反射找到方法的调用者?

如何在 Chrome 中为 WebRTC 调用者设置远程描述而不会出错?

如何使用inspect从Python中的被调用者那里获取调用者的信息?

休息 - 如何获取调用者的 IP 地址