在 Powershell 中比较字符串以进行输入验证时无法使用逻辑运算符

Unable to use logical operator while comparing strings for input validation in Powershell

我正在尝试提示用户输入,然后验证用户输入是否匹配两个不同选项之一,如果未提供正确输入,我将退出。

在示例中,我要求用户输入 'BOB' 或 'TOM' 作为有效输入,但是当我 运行 此代码时,我将始终收到消息 'Server type not entered correctly',即使我输入 BOB 作为提示的输入。

$ServerType = Read-Host -Prompt 'Enter Server Type (BOB or TOM)'

If ($ServerType -ne  "BOB" -Or $ServerType -ne  "TOM")
{
Write-Host -NoNewLine 'Server type not entered correctly'
}

我也试过了

If (($ServerType -ne  "BOB") -or ($ServerType -ne  "TOM"))
{
Write-Host -NoNewLine 'Server type not entered correctly'
}

然而,当我只测试一个值时它起作用了:

If ($ServerType -ne  "BOB")
{
Write-Host -NoNewLine 'Server type not entered correctly'
}

知道为什么我会得到这个吗?

在我的评论中,这种情况下的逻辑运算符应该是 -and,但请允许我给您举两个可以改进验证的示例。

$ServerType = Read-Host -Prompt 'Enter Server Type (BOB or TOM)'

if($ServerType -notmatch '^(bob|tom)$')
{
    Write-Host -NoNewLine 'Server type not entered correctly'
}
try
{
    [validateset('bob','tom')]
    $ServerType = Read-Host -Prompt 'Enter Server Type (BOB or TOM)'
}
catch
{
    Write-Host -NoNewLine 'Server type not entered correctly'
}