PowerShell如何设置输入字符上限为15,超出时重新提示输入而非报错
PowerShell 输入长度限制实现方案
你不需要使用[validatelength()]属性,也无需单独写IF语句做检测,直接把长度校验规则整合到until的终止判断条件即可实现需求:
do { $VM = Read-Host "Enter Server Name" } until ($VM -and $VM.Length -le 15)
上述代码只有在输入非空且字符长度不超过15时才会退出循环,不符合要求时会自动回到输入询问环节。
如果需要给用户明确的错误提示,可以在循环内增加判断逻辑:
do { $VM = Read-Host "Enter Server Name" $isValid = $true if (-not $VM) { Write-Host "错误:服务器名称不能为空,请重新输入" -ForegroundColor Red $isValid = $false } elseif ($VM.Length -gt 15) { Write-Host "错误:服务器名称长度不能超过15个字符,请重新输入" -ForegroundColor Red $isValid = $false } } until ($isValid)
原写法报错原因说明
你之前使用[validatelength()]的写法会直接报错,是因为该属性是PowerShell的参数验证属性,赋值时不满足规则就会抛出终止级错误,不会自动进入下一次循环。如果想要保留该属性的写法,可以增加try-catch捕获错误:
do { try { [string][validatelength(1,15)] $VM = Read-Host "Enter Server Name" $inputValid = $true } catch { $inputValid = $false Write-Host "错误:服务器名称长度需控制在1-15个字符之间,请重新输入" -ForegroundColor Red } } until ($inputValid)
内容的提问来源于stack exchange,提问作者RogerDingo
相关产品推荐
相关产品推荐

