检查功能中是否存在参数

cog*_*el0 21 powershell

我有如下功能:

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)