我的脚本以命令行参数的形式要求许多用户$numUsers
。然后,我使用该数字声明大小为$numUsers
的数组。
当用户提供数字时,它可以正常工作,但是当给定非数字字符时,我需要再次输入一个数字。
目前,我的代码只是失败,并抛出难看的错误消息。
$numUsers = Read-Host -Prompt 'Specify how many users'
$userArray = New-Object string[] $numUsers
我尝试使用递归函数将命令行arg转换为int,如果失败,则再次要求arg,但也会失败。
function makeInt {
param([string]$numString)
try { $newNum = [int]$numString }
catch { makeInt (Read-Host -Prompt 'try again') }
}
$numUsers = Read-Host -Prompt 'Specify how many users'
makeInt $numUsers
$userArray = New-Object string[] $numUsers
我也尝试了其他几种方法,但这与我最近几天所获得的结果差不多。希望有人可以提供帮助!
最佳答案
如果您要施加的唯一约束是用户输入可转换为[int]
,则可以在循环中使用 [int]::TryParse()
method:
[int] $number = -1
while (-not [int]::TryParse((Read-Host -Prompt 'Specify how many users'), [ref] $number)) {
Write-Warning "Not a valid number, please try again."
}
# You only get here if the user (ultimately) provided valid input.
# $number then contains the user's input as an [int].
[int]::TryParse()
尝试进行一次转换,如果转换成功,则将[int]
值存储在引用传递的变量([ref]
)中,并返回$True
;如果无法进行转换,则返回
$False
。while
循环不断提示,直到提供有效输入为止,此后$number
包含与用户输入的数字字符串等效的[int]
。
关于powershell - 如何将命令行参数设置为整数,但是如果给定非数字值,请再次询问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52595077/