PowerShell循环中如何验证用户输入 修复菜单无效输入误报问题
PowerShell系统信息查询菜单修复方案
问题根源
- 输入校验的判断语法不符合PowerShell规则,无法正确识别合法输入,导致所有输入都会触发无效提示
Get-ComputerInfo默认返回结构化对象,直接打印会显示属性包装格式,无法直接展示纯信息值
修正后完整代码
function sysInfoMenu { param ( [string] $Title = '系统信息查询' ) Clear-Host Write-Host "=============== $Title ===============" "`n`n" Write-Host "请选择以下操作选项:" "`n" Write-Host "按 1 查询:操作系统名称" Write-Host "按 2 查询:操作系统类型" Write-Host "按 3 查询:操作系统架构(32/64位)" Write-Host "按 4 查询:操作系统版本" Write-Host "按 5 查询:BIOS版本" Write-Host "按 6 查询:电脑厂商" Write-Host "按 7 查询:电脑名称" Write-Host "按 8 查询:当前所属域" Write-Host "按 9 查询:电脑型号" Write-Host "按 10 查询:当前登录用户" Write-Host "按 11 查询:当前时区" Write-Host "按 'q' 退出程序" } do { sysInfoMenu $info = $null $UserInput = Read-Host "请输入选项编号" switch ($UserInput) { '1' {$info = (Get-ComputerInfo -Property OSName).OSName} '2' {$info = (Get-ComputerInfo -Property OSType).OSType} '3' {$info = (Get-ComputerInfo -Property OSArchitecture).OSArchitecture} '4' {$info = (Get-ComputerInfo -Property OSVersion).OSVersion} '5' {$info = (Get-ComputerInfo -Property BiosVersion).BiosVersion} '6' {$info = (Get-ComputerInfo -Property CsManufacturer).CsManufacturer} '7' {$info = (Get-ComputerInfo -Property CsName).CsName} '8' {$info = (Get-ComputerInfo -Property CsDomain).CsDomain} '9' {$info = (Get-ComputerInfo -Property CsModel).CsModel} '10' {$info = (Get-ComputerInfo -Property CsUserName).CsUserName} '11' {$info = (Get-ComputerInfo -Property TimeZone).TimeZone} } # 合法输入校验 $validOptionList = 1..11 + 'q' if ($UserInput -notin $validOptionList) { Write-Host "输入无效,请选择菜单内的选项" } else { # 合法非退出输入才展示结果 if ($UserInput -ne 'q' -and $info -ne $null) { Write-Host "查询结果:$info" } } # 退出前不需要按回车确认 if ($UserInput -ne 'q') { pause } } until ($UserInput -eq 'q')
改动说明
- 替换了错误的校验逻辑:提前定义所有合法选项列表,用
-notin运算符判断输入是否在合法范围内,逻辑清晰不容易出错 - 调整信息取值方式:通过
.属性名的方式直接取出查询结果的纯值,避免显示@{属性名=内容}的格式 - 优化交互逻辑:只有输入合法非退出选项时才打印查询结果,输入q直接退出不需要二次确认
内容的提问来源于stack exchange,提问作者Mckibblesydoo
相关产品推荐
相关产品推荐

