在 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
,但请允许我给您举两个可以改进验证的示例。
- 第一个是使用
-match
\ -notmatch
比较运算符,它允许使用 regex
:
$ServerType = Read-Host -Prompt 'Enter Server Type (BOB or TOM)'
if($ServerType -notmatch '^(bob|tom)$')
{
Write-Host -NoNewLine 'Server type not entered correctly'
}
- 第二个,正在使用 ValidateSet attribute:
try
{
[validateset('bob','tom')]
$ServerType = Read-Host -Prompt 'Enter Server Type (BOB or TOM)'
}
catch
{
Write-Host -NoNewLine 'Server type not entered correctly'
}
我正在尝试提示用户输入,然后验证用户输入是否匹配两个不同选项之一,如果未提供正确输入,我将退出。
在示例中,我要求用户输入 '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
,但请允许我给您举两个可以改进验证的示例。
- 第一个是使用
-match
\-notmatch
比较运算符,它允许使用regex
:
$ServerType = Read-Host -Prompt 'Enter Server Type (BOB or TOM)'
if($ServerType -notmatch '^(bob|tom)$')
{
Write-Host -NoNewLine 'Server type not entered correctly'
}
- 第二个,正在使用 ValidateSet attribute:
try
{
[validateset('bob','tom')]
$ServerType = Read-Host -Prompt 'Enter Server Type (BOB or TOM)'
}
catch
{
Write-Host -NoNewLine 'Server type not entered correctly'
}