如果-ne和-or运算符不在powershell中工作

时间:2016-12-29 16:36:53

标签: powershell

以下带有-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))...

1 个答案:

答案 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){}