PowerShell比较麻烦,无法进行复合比较

时间:2019-10-16 21:44:39

标签: powershell if-statement comparison-operators

我无法进行复合比较。我没有成功使用-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 个答案:

答案 0 :(得分:3)

    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"
}

它应该打印其他”

答案 1 :(得分:3)

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

这将永远无法工作,因为两者之一始终为真,并且您正在使用-or。从字面上看,有100万种方法可以解决此问题,但是鉴于您所显示的内容并推断您给出了一个多步骤的过程,这就是我要做的:

$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)