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
相关产品推荐
相关产品推荐

