2016-12-29 21 views
1

以下if语句与-ne和-or运算符不起作用(注意我没有包括大括号)。 $ MyVariable是一个从函数中的参数进来的整数,并且用if语句检查值。我想要的是,如果$ MyVariable不等于16,24或32,则返回错误消息,否则继续。调用函数为FunctionName 16;在ps1脚本中。如果与-ne和-or运算符不在powershell中工作

功能定义如下:

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))... 
+2

Logic fla W上。 *至少有两个* -ne'比较总是正确的。使用'-and'或'-eq'进行比较 –

+1

是的。在重新审视逻辑之后,它是有道理的。谢谢。 –

回答

2

如果三个相等比较中的任何一个返回$false,两个人必须返回true(如果$x等于16它将永远等于24或32),因此该语句将总是评估为$true。而不是

if ($MyVariable -eq 16 -or $MyVariable -eq 24 -or $MyVariable -eq 32){} 

,或者使用-contains操作:

变化-or-and测试所有三种情况:

if ($MyVariable -ne 16 -and $MyVariable -ne 24 -and $MyVariable -ne 32){} 

或者检查是否平等,而不是不

if (@(16,24,32) -contains $MyVariable){}