Надеюсь, вы можете помочь.
У меня есть скрипт, который по сути представляет собой интерактивное меню, использующее функцию переключения. Один из вариантов переключения требует, чтобы пользователь ввел целое число с помощью функции Read-Host, чтобы установить переменную, которая будет использоваться позже в этом блоке скрипта. Я бы хотел, чтобы целое число могло изменять значение несколько раз за один сеанс Powershell.
Я пытаюсь добавить некоторые сообщения об ошибках, чтобы остановить выполнение остальной части скрипта, если значение не является целым числом или меньше 0. Я использую приведенное ниже, но независимо от того, что мой ввод Read-Host всегда будет выдавать первый ошибка. Может ли кто-нибудь сообщить мне, что я делаю неправильно? Благодарю вас!
'16'{
Write-Host `nThis will export results to a CSV file - Please allow time for the report to run`n -BackgroundColor Black -ForegroundColor Yellow
$InactiveDays = Read-Host "`nEnter How Many Inactive Days To Search By`n"
if ($InactiveDays -isnot [int]) {
Write-Host 'You did not provide a number as input'-BackgroundColor Black -ForegroundColor Red
}
elseif ($InactiveDays -lt 1) {
Write-Host 'Enter a value above 1 as input' -BackgroundColor Black -ForegroundColor Red
}
else
{ *Rest of script } }
Решение проблемы
поменять $InactiveDays -isnot [int] на$InactiveDays -notmatch "\d"
Как упоминалось в нескольких комментариях, read-hostвсегда будет возвращаться type string, что означает, что даже если значение равно, 4оно не будет type int.
Однако вы все еще можете взаимодействовать с ним как с целым числом, потому что powershell полиморфен.
Предлагаемая -match "\d"команда вместо этого будет использовать регулярное выражение, чтобы проверить, содержит ли значение только числа, что позволит достичь того, что вы хотели.
Комментариев нет:
Отправить комментарий