繁体   English   中英

如何检查 PowerShell 开关参数是否缺失或错误

[英]How to check if a PowerShell switch parameter is absent or false

我正在构建一个 PowerShell function 来构建一个 hash 表。 我正在寻找一种可以使用开关参数指定为不存在、真或假的方法。 我怎样才能确定这一点?

我可以通过使用 [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
}

您可以使用PSBoundParameter进行检查

PS C:\ > function test-switch {
   param (
    [switch]$there = $true
   )
   if ($PSBoundParameters.ContainsKey('there')) {
       if ($there) {
          'was passed in'
       } else {
          'set to false'
       }
   } else {
       'Not passed in'
   }
}

在此输入图像描述

如果您的参数可以是$true$false或未指定,那么您可能不需要[Switch]参数类型,因为它只能是$true$false$false与未指定相同)。 作为替代方案,您可以使用可以为空的布尔参数。 例:

function Test-Boolean {
  param(
    [Nullable[Boolean]] $Test
  )

  if ( $Test -ne $null ) {
    if ( $Test ) {
      "You specified -Test `$true"
    }
    else {
      "You specified -Test `$false"
    }
  }
  else {
    "You did not specify -Test"
  }
}

更简单:

function test{
 [CmdletBinding()]
  param(
  [Parameter(Mandatory=$False,Position=1)][switch]$set
  )
 write-host "commence normal operation"
 if(-not $set){"switch is not set, i execute this"}
 else{"switch is set"}
}

output在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM