参数验证
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
)
我试图验证一个名为“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
)