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

PowerShell脚本开发:自动检测可读写的活跃COM串口

通用PowerShell串口检测脚本

以下是能实现你需求的完整脚本,会自动遍历所有可用串口,发送回车并检查响应,最后把有响应的串口存入$activePorts变量:

# 获取所有可用串口列表
$allPorts = [System.IO.Ports.SerialPort]::GetPortNames()
# 初始化存储活跃串口的变量
$activePorts = @()

# 遍历每个串口
foreach ($portName in $allPorts) {
    try {
        # 创建串口对象,配置参数(波特率115200,无校验,8位数据位,1位停止位)
        $port = New-Object System.IO.Ports.SerialPort -ArgumentList $portName, 115200, "None", 8, "One"
        # 设置读取超时(避免无响应时卡住)
        $port.ReadTimeout = 2000
        # 打开串口
        $port.Open()

        # 发送回车指令
        $port.Write("`r")
        # 等待设备响应(可选,部分设备需要一点时间处理)
        Start-Sleep -Milliseconds 500

        # 读取响应内容
        $response = $port.ReadLine()

        # 如果读取到响应,将该串口加入活跃列表
        if (-not [string]::IsNullOrEmpty($response)) {
            $activePorts += $portName
            Write-Host "检测到活跃串口: $portName"
        }
    }
    catch {
        # 捕获异常(比如串口被占用、无响应超时等),跳过该串口
        Write-Host "串口 $portName 无响应或无法访问: $_"
    }
    finally {
        # 无论成功失败,都确保关闭串口
        if ($port -and $port.IsOpen) {
            $port.Close()
            $port.Dispose()
        }
    }
}

# 输出最终结果
Write-Host "`n所有活跃串口列表:"
$activePorts

关键说明

  • 用foreach循环遍历所有串口,替代你写的不完整for循环
  • 加入try/catch/finally块:处理串口打开失败、超时等异常,同时确保每个串口用完都关闭,避免资源占用
  • 设置ReadTimeout防止无响应时脚本卡住
  • 发送回车用`r(回车符),如果设备需要回车换行,可改为`r`n
  • 用ReadLine()读取单行响应,若设备响应是多行或无换行,可替换为ReadExisting()读取所有缓存内容
  • 最终$activePorts变量存储所有有响应的串口名称,后续脚本可直接调用该变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:32:22