我正在构建用于构建哈希表的PowerShell函数。我正在寻找一种可以使用switch参数指定为不存在,正确或错误的方法。我该如何确定?
我可以通过使用[boolean]参数来解决此问题,但我发现这不是一个很好的解决方案。另外,我也可以使用两个开关参数。
function Invoke-API {
param(
[switch]$AddHash
)
$requestparams = @{'header'='yes'}
if ($AddHash) {
$requestparams.Code = $true
}
在指定false时如何显示为false,而在未指定switch参数时如何显示为空?
答案 0 :(得分:8)
要检查调用者是否传递了参数,请检查$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
}
答案 1 :(得分:2)
您可以使用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'
}
}
答案 2 :(得分:0)
如果您的参数可以是$true
,$false
或未指定,那么您可能不希望使用[Switch]
参数类型,因为它只能是$true
或{ {1}}($false
与未指定相同)。或者,可以使用可为空的布尔参数。示例:
$false