2016-08-16 75 views
0

我有以下代碼片段,我不明白爲什麼if不起作用。如果-OR語句與比較運算符不按預期工作

目標是從用戶那裏得到一些輸入,如果它是有效的輸入,繼續。如果不是,那麼繼續詢問,直到它是有效的條目。

無論我在第一個問題上輸入什麼值(例如wmic),它總是進入do loop。第二次進場時,說出wmic,它會根據需要打破做法。無效的條目讓我在循環中直到輸入正確的條目。

$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比較工作得很好,當需要打破。

回答

3

您正在使用錯誤的操作符。假設$query_meanswmic。那麼您的第一個條件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") 
+0

感謝您的答覆,併爲現在需要工作的事情。我想我的OR框架非常重要。 –