参数验证

Parameter validation

我试图验证一个名为“Collect”的参数只接受 3 个参数(基本、中等和完整),但是当我为“收集”参数分配一个“有效”值时,它得到一个“假”return.

我就是这么做的:

[CmdLetBinding()]
param([string]$Collect)
)

if ($collect -ne ('basic' -or 'medium' -or 'full')) {
  Write-Host "'collect' is mandatory with mandatory values. For reference, use -help argument" -ForegroundColor Red
  exit
}

运行 测试:

c:\script.ps1 -收集基础

'collect' is mandatory with mandatory values. For reference, use -help argument

PD: -我知道我可以使用 validateset,但这对我不起作用。 -我认为问题出在嵌套的$collect -ne ('basic' -or 'medium' -or 'full'),但我该如何解决呢?

-or 操作 总是 计算结果为 [bool] - 所以你的 if 条件基本上是 $collect -ne $true.

您需要使用 -notin 而不是 -ne:

if($collect -notin 'basic','medium','full'){ 
   # ...
}

或者更好的是,只需使用 ValidateSet 属性:

param(
  [ValidateSet('basic','medium','full')]
  [string]$Collect
)