String 带有比较运算符的if-OR语句未按预期工作

String 带有比较运算符的if-OR语句未按预期工作,string,powershell,if-statement,comparison,String,Powershell,If Statement,Comparison,我有下面的代码片段,我不明白为什么if不能工作 目标是从用户那里获得一些输入,如果是有效的输入,请继续。如果不是,那么继续询问,直到它是一个有效的条目 无论我在第一个问题上输入什么值,例如wmic,它总是进入do循环。比如说,当第二次进入wmic时,它会按需要中断do。无效条目会使我一直处于循环中,直到输入正确的条目 $query_means = read-host 'Enter one of psinfo, powershell or wmic' if ($query_means -ne "

我有下面的代码片段,我不明白为什么if不能工作

目标是从用户那里获得一些输入,如果是有效的输入,请继续。如果不是,那么继续询问,直到它是一个有效的条目

无论我在第一个问题上输入什么值,例如wmic,它总是进入do循环。比如说,当第二次进入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")

}

“直到”比较工作正常,在需要时中断。

您使用了错误的运算符。假设$query_的意思是wmic。然后,if语句的第一个条件为false,而其他两个条件为true。由于您使用的是OR运算符,因此结果为真。使用OR运算符,您将始终具有至少两个计算为true的条件,因此总体结果将始终为true

相反,您应该使用AND运算符,因为当两个字符串都不在您提供的列表中时,您希望条件有效

因此,更改-或更改-和您的代码应该可以:

if ($query_means -ne "wmic" -AND $query_means -ne "psinfo" -AND $query_means -ne "powershell")

您使用了错误的运算符。假设$query_的意思是wmic。然后,if语句的第一个条件为false,而其他两个条件为true。由于您使用的是OR运算符,因此结果为真。使用OR运算符,您将始终具有至少两个计算为true的条件,因此总体结果将始终为true

相反,您应该使用AND运算符,因为当两个字符串都不在您提供的列表中时,您希望条件有效

因此,更改-或更改-和您的代码应该可以:

if ($query_means -ne "wmic" -AND $query_means -ne "psinfo" -AND $query_means -ne "powershell")

感谢您的回复,现在一切按需进行。我想,在我的思想或心境中有很多。谢谢你的回复,现在一切都按需要进行了。在我的思想或心境中,我想。