Используя Powershell, отображать пользовательское сообщение, если пользовательский ввод не является числом или не является одним из заданных параметров - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь сделать следующее:

Отображение списка опций для ввода пользователем.Все варианты пользовательского ввода являются целыми числами (в данном случае 1, 2, 3, 4 и 5). Если пользователь вводит одну из допустимых опций, он должен повторить их ввод на экране.Если пользовательский ввод больше заданных параметров, он должен дать пользователю сообщение о том, что его ввод превышает допустимые параметры.Если пользовательский ввод ниже заданных опций, он должен дать пользователю сообщение о том, что его ввод был ниже разрешенных опций.Если пользовательский ввод не является целым числом, он должен дать им сообщение о том, что его ввод не является допустимым числом.Если пользовательский ввод пуст, он должен отобразить сообщение о том, что его ввод не может быть пустым.Затем, конечно, если что-то не так, что не определено выше, оно должно сообщить им, что произошла неизвестная ошибка.

Вот что у меня есть, и это в основном работает ....

cls
echo "What computers are we working on?"
echo ""
echo "1 = All Computer Lab Computers"
echo "2 = Watts' Computer Lab Computers"
echo "3 = Wells' Computer Lab Computers"
echo "4 = A Specific Computer"
echo "5 = Custom list of Computer Lab Computers"
echo ""
echo ""
$empty = $null
$result = $null
[int]$result = read-host "Make a Selection (1 - 5) "
cls
Clear-Host
IF ( $result -lt "6" -and $result -gt "0" ) { echo " You Selected $result" }
ElseIf ( $result -ge "6") {echo "Your Selection of $result was greater than 
allowed options" }
ElseIf ( $result -le "0" ) {echo "Your Selection of $result was smaller than 
allowed options" }
ElseIf ( $result -eq "") {echo "Your input cannot be blank!" }
ElseIf ( $result -isNot ([int]) ) {echo " Your Selection of $result is not a 
valid number. Please try again."}
Else { echo "No clue what happened...but you chose $result"}

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

Есть идеи о том, как я могу заставить эту работу работать как задумано?

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

вот еще один способ сделать текстовое меню ... [ ухмылка ]

$MenuList = @(
    'All Computer Lab Computers'
    'Watts Computer Lab Computers'
    'Wells Computer Lab Computers'
    'A Specific Computer'
    'Custom list of Computer Lab Computers'
    )

$MenuTitle = 'What computers are we working on?'

$ValidChoices = 1..($MenuList.Count)

$Choice = ''
while ([string]::IsNullOrEmpty($Choice))
    {
    Clear-Host
    Write-Host $MenuTitle
    foreach ($ML_Item in $MenuList)
        {
        Write-Host ('    {0} - {1}' -f ($MenuList.IndexOf($ML_Item) + 1), $ML_Item)
        }
    $Choice = Read-Host 'Please select an item from the above list by number or [ x ] to exit '
    Write-Host ''

    if ($Choice -eq 'x')
        {
        Write-Host 'Exiting now ...'
        break
        }
    if ($Choice -notin $ValidChoices)
        {
        [console]::Beep(1000, 300)
        Write-Warning ('    Your selection [ {0} ] is not valid.' -f $Choice)
        Write-Warning '    Please try again ...'
        pause
        $Choice = ''
        }
    }

''
'You chose [ {0} ]' -f $Choice

отображение меню ...

What computers are we working on?
    1 - All Computer Lab Computers
    2 - Watts Computer Lab Computers
    3 - Wells Computer Lab Computers
    4 - A Specific Computer
    5 - Custom list of Computer Lab Computers
Please select an item from the above list by number or [ x ] to exit : 

вывод дляневерный ввод ...

WARNING:     Your selection [ r ] is not valid.
WARNING:     Please try again ...
Press Enter to continue...: 

вывод для действительного ввода 2 ...

You chose [ 2 ]
0 голосов
/ 30 ноября 2018

Вы можете сделать это намного более упорядоченным, используя do / till и try / catch, это также устранит необходимость во всех операторах if

cls
$menu = "What computers are we working on?
1 = All Computer Lab Computers
2 = Watts' Computer Lab Computers
3 = Wells' Computer Lab Computers
4 = A Specific Computer
5 = Custom list of Computer Lab Computers

"
echo $menu
$result = $null

do {
    try {
        $isValid = $true
        [int]$result = read-host "Make a Selection (1 - 5) "
    }
    catch {$isValid = $false}
        Clear-Host
        echo "Your Selection of $result is not a valid number. Please try again"
        echo ""
        echo $menu
    } # end do 
until (($result -lt 6 -and $result -gt 0) -and $isValid)

cls
Clear-Host
echo " You Selected $result"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...