powershell - 使用函数参数作为变量和开关
问题描述
也许我看错了。但是,我有一个 PowerShell 函数,我想测试是否存在输入参数,就像开关一样。如果参数存在,只需使用/分配一个默认值。此外,我希望用户能够覆盖默认值并指定自己的值。我可以通过以下条件使其适用于上述一些但不是全部的标准......
Function test {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$false)]
[ValidateRange(1,25)]
[Int]
$OptionalNumber = 1
)
if($PSBoundParameters.keys -contains "OptionalNumber"){
Write-Output "The optional number parameter is present"
Write-Output "The Optional Number is: $OptionalNumber"
}else{Write-Output "The optional number parameter was not specified"}
}
运行“测试”有效。
运行“Test -OptionalNumber 3”有效。
运行“Test -OptionalNumber”失败。
我希望能够使用“-OptionalNumber”并基本上将其用作开关,而不必显式传入默认值 1,因为指定该值会破坏默认值的目的。
我尝试了 [ValidationScript()]、[AllowNull()]、[Nullable[int]] 和其他一些组合的各种组合,但均无济于事。我知道我可以将它分解为两个参数,一个作为开关,另一个作为值......例如 [Switch]$OptionalNumber 和 [Int]$OptionalNumberValue。但这似乎很笨拙。我觉得有更好/更清洁的方法。
编辑: 按照建议,我打开了一个将此功能添加到 PowerShell 的功能请求。 https://github.com/PowerShell/PowerShell/issues/12104
解决方案
推荐阅读
- r - 使用“数据”参数编写长函数
- python - 如何在本地运行时安装 Google colab?
- ios - 带有 jasonett/iOS 的后退按钮
- jpa - 如何使方法只接受实体
- mysql - Nodejs护照设置混乱
- node.js - pm2 守护进程在几个小时后死亡
- jgrapht - JGraphT 中的“GetDiameter”函数会占用大量内存吗?
- linux - 如何仅在 bash 脚本中获取文件作为输出
- c# - 从对象列表中选择对象,从 DropDownList
- apache-spark - org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.token.SecretManager$InvalidToken):令牌已过期