Проблема сравнения PowerShell. Невозможно выполнить сложное сравнение. - PullRequest
2 голосов
/ 17 октября 2019

У меня проблемы с составным сравнением. Мне не удалось использовать -ne или -or. Ниже я думаю, как это должно работать:

If (($Var -ne 'Y') -or ($Var -ne 'N') {
     #Logic for error message and loop back to user promt
Else { #Go to another function }

Теперь, когда я пытаюсь это сделать, независимо от того, что я вставляю, я перехожу к своему сообщению об ошибке, и, поскольку оно возвращается к приглашению пользователя, оно просто делаетбесконечный цикл. Даже если я введу Y или N, я перейду к сообщению об ошибке.

Теперь я разбил этот код до приведенного ниже кода, и это работает, но я бы предпочел сделать сложное сравнение, гдеЕсли переменная не имеет значения «y» или «n», перейдите к ошибке (это связано с тем, что входы Y и N переводят скрипт в одну и ту же часть моего кода).

If ($Var -eq 'Y') {
     #Do action 1
}
ElseIf ($Var -eq 'N') {
     #Do action 1
}
Else {
     #Give error message and loop back to prompt
}

Ответы [ 2 ]

3 голосов
/ 17 октября 2019
If (($Var -ne 'Y') -or ($Var -ne 'N')) {
     #Logic for error message and loop back to user promt
Else { #Go to another function }

Это никогда не сработает, поскольку одно из двух всегда будет истинным, и вы используете -or. Существует буквально миллион способов решения этой проблемы, но, учитывая то, что вы показали, и вы поняли, что вы сделали многоэтапный процесс, я бы сделал следующее:

$step1complete = $false
Write-Host "Some question"
do {
  $var = Read-Host -Prompt "Enter Y or N"
  if ($var -in @('Y','N')) {
    $step1complete = $true
  }
  else {
    Write-Host "Invalid option!"
  }
} until ($step1complete)
3 голосов
/ 17 октября 2019
    If (($Var -ne 'Y') -or ($Var -ne 'N')) {

Это всегда будет правдой. Я думаю, что вы хотите сделать "-и" здесь.

Если вы попробуете это:

$Var = "1"
If (($Var -ne 'Y') -and ($Var -ne 'N')) {
     #Logic for error message and loop back to user promt
      "ne Y or ne N"
     }
Else { #Go to another function 
 "else"
}

Это должно вывести еще "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...