如何检查 PowerShell 开关参数是否缺失或为 false

2024-01-06

我正在构建一个构建哈希表的 PowerShell 函数。我正在寻找一种方法,可以使用开关参数将其指定为不存在、true 或 false。我怎样才能确定这一点?

我可以通过使用 [boolean] 参数来解决这个问题,但我发现这不是一个优雅的解决方案。或者我也可以使用两个开关参数。

function Invoke-API {
    param(
        [switch]$AddHash
    )

    $requestparams = @{'header'='yes'}

    if ($AddHash) {
        $requestparams.Code = $true
    }

当指定 false 时如何让它显示 false,而未指定 switch 参数时不显示任何内容?


要检查参数是否由调用者传入,请检查$PSBoundParameters自动变量:

if($PSBoundParameters.ContainsKey('AddHash')) {
    # switch parameter was explicitly passed by the caller
    # grab its value
    $requestparams.Code = $AddHash.IsPresent
}
else {
    # parameter was absent from the invocation, don't add it to the request 
}

如果您想要传递多个开关参数,请迭代中的条目$PSBoundParameters并测试每个值的类型:

param(
  [switch]$AddHash,
  [switch]$AddOtherStuff,
  [switch]$Yolo
)

$requestParams = @{ header = 'value' }

$PSBoundParameters.GetEnumerator() |ForEach-Object {
  $value = $_.Value
  if($value -is [switch]){
    $value = $value.IsPresent
  }

  $requestParams[$_.Key] = $value
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查 PowerShell 开关参数是否缺失或为 false 的相关文章

随机推荐