我有一个功能如下:
function T
{
Param
(
[switch] $IsValueNameRegularExpression
)
..
}
通常要确定参数是否存在,您可以执行
if ($Param)
,只看到这是一个 [switch]
, 如果函数被调用为 T -IsValueNameRegularExpression:$false
将在 if ($IsValueNameRegularExpression)
上返回 false ,即使参数存在 - 即调用者为可选参数指定了一个值。如果我从
[switch]
更改参数类型至 [bool]
显然,同样的事情会发生。在我的函数代码中,我调用了一些 .NET 方法,这些方法包含我的
[bool]
的默认设置。 `[switch]` 参数,所以除非用户指定了一个值(是真还是假),否则我不想将它传递给 .NET 方法。我可以为参数分配默认值以匹配 .NET 方法的默认值,但这是假设 .NET 方法的默认值永远不会改变,这可能不是真的......
那么,有没有更优雅的方式来做到这一点?
最佳答案
使用 $PSBoundParameters.ContainsKey()
为了检查参数是否存在:
function T
{
Param
(
[switch] $IsValueNameRegularExpression
)
$PSBoundParameters.ContainsKey('IsValueNameRegularExpression')
}
T
T -IsValueNameRegularExpression
T -IsValueNameRegularExpression:$false
输出:
False
True
True
关于powershell - 检查函数中是否存在参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25326732/