@mjolinor's
answer 试图解释它,但不完整。
当你这样做时(1,2,3) -eq 1
,你会回来1
。在这种情况下-eq
,数组的作用是返回等于 RHS 的元素,如果没有匹配则什么都不发生。
另一方面,如果你这样做1 -eq (1,2,3)
,你会得到False
,因为只有当数组是 LHS 时才会发生上述情况。因此,-eq
当涉及到数组时,运算符的行为总是与上述情况类似,这是不正确的。
现在,开始-ne
使用。当你这样做时(1,2,3) -ne 1
,你会得到数组2,3
。也就是说,它返回不等于 RHS 的元素。类似于-eq
, 1 -ne (1,2,3)
, 将返回True
来到你的条件 -($error -eq $null) -or ($error -ne $null)
当$error
为空时,$error -eq $null
将不返回任何内容(因此False
在 bool 语句中)。这当然是因为 $error 中没有元素匹配$null
。此外,$error -ne $null
也不会返回任何内容(因此False
在 bool 语句中),因为 $error 为空并且其中没有不是 $null 的元素。
因此,当$error
为空时,您的语句将为 false,并且 if 中的块不会被执行。
如果$error
不为空,则任何一个条件都会为真,并且您会看到write-host
执行。
那么你如何真正解决这个问题呢?
直接的方法是检查$error
数组的长度:
if($error.length -gt 0){
write-host "error occured"
}
另外,请阅读这篇讨论各种错误处理策略的文章 - http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/12/powershell-error-handling-and-why-you-should-care .aspx