Powershell条件返回非bool结果

时间:2017-03-02 00:03:20

标签: string windows powershell

我希望结果是bool $ true或$ false

$testlist = @("red","orange","green")
$testlist -eq "green"

这应该导致$ True,但它会导致"绿色"

对比

$testlist -ne "green" 

将其他值作为字符串返回,除了"绿色"

用于查找您正在查找的值的简洁功能,但对于实际的条件返回没有用,因为它每次都会产生$ True,因为它是非零长度值。

2 个答案:

答案 0 :(得分:1)

您应该测试一个值是否在数组中:

$testlist -contains "green"

答案 1 :(得分:1)

  

我希望结果是bool $true$false

您运行的代码可以作为布尔值进行评估,您仍然可以获得相同的结果。非常多且非零的整数和非空字符串将被转换为布尔容易。

PS C:\Users\Matt> $testlist = @("red","orange","green")
[bool]($testlist -eq "green")
True

-eq和许多其他运算符(如-match)一起使用数组和标量值。

虽然它隐藏了幕后发生的事情,但这可以作为if语句。

if($testlist -eq "green"){"Green is in there"}

不确定是否发生了这种情况,但是您的代码评估方式是PowerShell返回满足查询的所有数组成员。将此视为另一个例子:

PS C:\Users\Cameron> $testlist = @("red","orange","green","green")
$testlist -eq "green"
green
green

你看到它返回绿色两次,因为它在数组中两次。

4c74356b41's answer使用-contains数组运算符,它通过设计返回一个布尔值。如果你至少有v3,你也可以使用更直观的-in,它的工作方式几乎相同。

"green" -in "red","orange","green"

我只是想确定你知道发生了什么,并且通常一种方法来解决PowerShell的疯狂问题