我有如下功能:
function T
{
Param
(
[switch] $IsValueNameRegularExpression
)
..
}
Run Code Online (Sandbox Code Playgroud)
通常要确定参数是否存在if ($Param)
,只能看到这是a [switch]
,如果调用该函数T -IsValueNameRegularExpression:$false
将返回false if ($IsValueNameRegularExpression)
,即使参数存在 - 即调用者为可选参数指定了值.
如果我从改变参数类型[switch]
,以[bool]
同样的事情会发生,很明显.
在我的函数的代码中,我调用一些.NET方法,其中包含我的[bool]
`[switch]`参数的默认设置,所以除非用户指定了一个值(是真或假),我不想将它传递给.NET方法.
我可以为参数指定默认值以匹配.NET方法的默认值,但这可以假设.NET方法的默认值永远不会改变,这可能不是真的......
那么,有更优雅的方式吗?
Rom*_*min 48
使用$PSBoundParameters.ContainsKey()
以检查一个参数存在:
function T
{
Param
(
[switch] $IsValueNameRegularExpression
)
$PSBoundParameters.ContainsKey('IsValueNameRegularExpression')
}
T
T -IsValueNameRegularExpression
T -IsValueNameRegularExpression:$false
Run Code Online (Sandbox Code Playgroud)
输出:
False
True
True
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21055 次 |
最近记录: |