PowerShell中Collect参数合法值校验逻辑不生效问题如何解决?
问题根因
你写的判断逻辑不符合PowerShell语法规则:('basic' -or 'medium' -or 'full')这个表达式的运算结果不是三个可选值的集合,而是固定布尔值*True*。PowerShell中非空字符串做布尔运算时默认返回真,所以整段或运算的结果永远是True,你传入的合法字符串和True做不等判断的结果永远为真,所以只要走到判断逻辑就会触发报错。
另外你的代码还存在一个语法问题:param([string]$Collect)行多写了一个右括号,运行时会提前报语法错误。
修复方案
方案1(推荐):使用-notin运算符判断
直接校验参数值是否不在合法值数组中,写法简洁易读:
[CmdLetBinding()] param( [string]$Collect ) if ($Collect -notin @('basic', 'medium', 'full')) { Write-Host "'collect' is mandatory with mandatory values. For reference, use -help argument" -ForegroundColor Red exit }
方案2:拆分多个不等判断用-and连接
如果不想用数组判断,也可以分开写每个不等条件,用与运算符连接:
if ($Collect -ne 'basic' -and $Collect -ne 'medium' -and $Collect -ne 'full') { # 报错逻辑 }
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

