2016-08-16 6 views
0

次のコードスニペットがあり、なぜifが機能しないのかわかりません。比較演算子が期待通りに機能しない-ORステートメントがある場合

目的は、ユーザーからの入力を得ることです。有効な入力であれば、実行してください。そうでない場合は、有効なエントリになるまで尋ねてください。

最初の質問(たとえばwmic)にどのような値を入力しても、必ずdo loopに入ります。 2回目のパスで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の比較は、必要に応じて正常に機能します。

答えて

3

誤った演算子を使用しています。 $query_meanswmicであるとします。その後、ifの最初の条件はfalseですが、他の2つの条件はtrueです。 OR演算子を使用しているため、結果はtrueです。 OR演算子を使用すると、常に少なくとも2つの条件があり、結果はtrueとなるため、結果は常にtrueになります。

代わりにAND演算子を使用する必要があります。これは、指定した文字列がいずれの文字列にも含まれていないときに条件を有効にするためです。

ので-AND-ORを変更し、あなたのコードは問題ないはずです。今、必要に応じて応答し、もののため

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

おかげで動作します。私のORフレームの多くに、私は思います。 –

関連する問題