以下带有-ne和-or运算符的if语句不起作用(注意我没有包括大括号)。 $ MyVariable是一个来自函数中参数的整数,并且if语句检查该值。我想要的是,如果 $ MyVariable 不等于16,24或32然后返回错误消息,否则继续。在ps1脚本中将函数调用为 FunctionName 16; 。
功能定义如下:
function FunctionName
{
param([Parameter(Mandatory = $false, Position = 0)]
[AllowNull()]
[int] $MyVariable,
[Parameter(Mandatory = $false, Position = 1)]
[bool] $MyVariable2,
[Parameter(Mandatory = $false, Position = 2)]
[bool] $MyVariable3);
if (...
}
我在以下if语句中做错了什么?
if ($MyVariable -ne 16 -or $MyVariable -ne 24 -or $MyVariable -ne 32)...
if (16 -ne $MyVariable -or 24 -ne $MyVariable -or 32 -ne $MyVariable)...
if (($MyVariable -ne 16) -or ($MyVariable -ne 24) -or ($MyVariable -ne 32))...
答案 0 :(得分:2)
如果三个相等比较中的任何一个返回$false
,则另外两个必须返回true(如果$x
等于16,它将永远不会等于24或32),并且所以语句将始终评估为$true
。
将-or
更改为-and
以测试所有3个案例:
if ($MyVariable -ne 16 -and $MyVariable -ne 24 -and $MyVariable -ne 32){}
或检查 是否相等而不是:
if ($MyVariable -eq 16 -or $MyVariable -eq 24 -or $MyVariable -eq 32){}
或者,请改用-contains
运算符:
if (@(16,24,32) -contains $MyVariable){}