Следующее утверждение не делает то, что вы думаете, делает.
if ($confirm -eq "Y" -or "y")
Проблема здесь в том, что здесь проверяются два отдельных утверждения, которые вы можете не ожидать $confirm -eq "Y"
и "y"
. Последний оценил бы его собственный как истинный, так как это непустая непустая строка.
Рассмотрим это одинокое утверждение [bool]"y"
, которое вернет True
.
То, что вы хотели написать, было $confirm -eq "Y" -or $confirm -eq "y"
. Однако это избыточно , поскольку -eq
по умолчанию не учитывает регистр . Так что $confirm -eq "Y"
будет достаточно само по себе.
Дополнительное чтение будет о том, как about_Logical_Operators
работает. Здесь есть несколько простых примеров того, как объединить несколько сравнений. Сказать, что левая сторона оценивается независимо от правой, было бы неправильно.
Логические операторы PowerShell оценивают только операторы, необходимые для определения истинности значения оператора. Если левый операнд в операторе, который содержит оператор and, равен FALSE, правый операнд не оценивается. Если левый операнд в операторе, который содержит оператор или, имеет значение ИСТИНА, правый операнд не оценивается.
При вводе кода любая буква или значение не имеют никакого эффекта, поскольку -or "y"
всегда имеет значение true. Ввод любого не-y значения с обновленным ответом составит $confirm -eq "y"
return False
Если бы была причина оценить несколько различных возможностей, вы бы посмотрели на -contains
или -in
. Я оставлю это вам, чтобы посмотреть дальше на них (чтобы уменьшить касательные)
$confirm -in "y","m","b"
Где Y = Да, M = Может и B = Бублик