我有以下代码片段,无法弄清楚if
为什么不起作用。
目的是从用户那里获得一些输入,如果输入是有效的,请继续。如果不是,则继续询问直到它是有效的条目。
无论我在第一个问题上输入的值是多少(例如wmic),总会输入do loop
。例如,进入wmic时,在第二遍时,它会按要求中断do。无效的输入使我一直处于循环状态,直到我输入正确的输入为止。
$query_means = read-host 'Enter one of psinfo, powershell or wmic'
if ($query_means -ne "wmic" -OR $query_means -ne "psinfo" -OR $query_means -ne "powershell")
{
do {
$query_means = read-host 'Invalid entry. Enter one of psinfo, powershell or wmic'
}Until ($query_means -eq "wmic" -OR $query_means -eq "psinfo" -OR $query_means -eq "powershell")
}
until
比较效果很好,可以在需要时中断。
最佳答案
您使用了错误的运算符。假设$query_means
是wmic
。然后,您的if
语句的第一个条件是false
,但是其他两个条件是true
。由于您使用的是OR
运算符,因此结果为true
。使用OR
运算符,您将始终至少有2个条件可以评估为true
,因此总结果将始终为true
。
相反,您应该使用AND
运算符,因为当两个字符串都不在您提供的列表中时,您希望条件有效。
因此,将-OR
更改为-AND
,您的代码应该可以:
if ($query_means -ne "wmic" -AND $query_means -ne "psinfo" -AND $query_means -ne "powershell")
关于string - 如果-OR语句与比较运算符不按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38966658/