@mjolinor'sanswer 试图解释它,但不完整。
当你这样做时(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