2016-08-16 2 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_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") 
+0

Спасибо за ответ и все работает, как нужно сейчас. Думаю, многим в моем воображении. –

Смежные вопросы