You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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')

改动说明

  1. 替换了错误的校验逻辑:提前定义所有合法选项列表,用-notin运算符判断输入是否在合法范围内,逻辑清晰不容易出错
  2. 调整信息取值方式:通过.属性名的方式直接取出查询结果的纯值,避免显示@{属性名=内容}的格式
  3. 优化交互逻辑:只有输入合法非退出选项时才打印查询结果,输入q直接退出不需要二次确认

内容的提问来源于stack exchange,提问作者Mckibblesydoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:54:00