Powershell-While语句

Powershell-While语句,powershell,while-loop,Powershell,While Loop,有人知道为什么当我在读主机中输入A或PTR时,while语句不会返回TRUE吗 $lookupDecision = Read-Host "Do you want results for A or PTR: " while( $lookupDecision -ne "A" -or $lookupDecision -ne "PTR" ) { $lookupDecision = Read-Host "Invalid input! Enter A or PTR: " } 此语句返回TRUE,

有人知道为什么当我在读主机中输入A或PTR时,while语句不会返回TRUE吗

$lookupDecision = Read-Host "Do you want results for A or PTR: "

while( $lookupDecision -ne "A" -or $lookupDecision -ne "PTR" ) {
    $lookupDecision = Read-Host "Invalid input! Enter A or PTR: "
}
此语句返回TRUE,并且无论您输入什么都将返回TRUE。如果输入A,则结果为TRUE,因为A不等于PTR。如果输入PTR,结果为TRUE,因为它不等于A。其他任何值都不等于两者

这里的问题是,您希望它最终返回FALSE,这样就可以通过while循环转到下一段代码。要做到这一点,你需要一个and而不是or


Do-while在提示用户输入方面非常棒

do {
     $lookupDecision = Read-Host "Do you want results for A or PTR: "
} while ($lookupDecision -ne "A" -And $lookupDecision -ne "PTR")

[字符串]::此处不需要比较,PowerShell中所有比较运算符的默认模式是在对字符串进行操作时不区分大小写。您必须明确说明区分大小写的比较操作,即a-cneA@MathiasR.Jessen我本以为会这样,但当我在发布前测试第一个版本时,我只是键入了一个,结果失败了。我不得不用一个螺丝刀把它修好。我认为这取决于PowerShell的版本。有趣的是,您在哪个版本/平台上看到了这种行为?无论如何,这里惯用的powershell解决方案是-ine而不是[string]::CompareWin8.1 PS4.0,我希望它支持。。。。现在我无法重现这个问题:我将删除第二部分。这仍然有坏的或坏的,并且不会起作用。此外,如果提示从未更改,则可能会混淆用户。最好有东西来说明问题。
do {
     $lookupDecision = Read-Host "Do you want results for A or PTR: "
} while ($lookupDecision -ne "A" -And $lookupDecision -ne "PTR")