powershell - 检查函数中是否存在参数

标签 powershell

我有一个功能如下:

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/

相关文章:

powershell - 当目标文件夹存在或不存在时复制项目

powershell - powershell的第一个参数是object []类型吗?

powershell - 在 PowerShell 中设置文本颜色

PowerShell Where-Object像多个字符串值

powershell - 从 Powershell 脚本返回对象

powershell - foreach 循环的写入进度问题

java - 从 Java 执行 powershell 命令

.net - 从Powershell表单文本框中删除字符限制

powershell - 从 Get-childitem 中排除一个文件夹和一个文件类型

powershell - 添加新成员时防止 Add-Member cmdlet 调用 ScriptProperty 成员