So zur Feier des Tages hab ich mich mal dem Problem des ständig wechselnden USB COM Ports angenommen:

Ist nicht die sauberste Art, aber funktioniert

Code:
Imports System
Imports System.IO
Imports System.IO.Ports
Imports System.Text

Module Module1
    Dim mySerial(0) As SerialPort
    Sub Main()
        Dim Serial(50) As SerialPort

        For i As Integer = 1 To 50
            Serial(i) = New SerialPort("COM" & i, 9600)

            Try
                Serial(i).Open()
                ReDim Preserve mySerial(mySerial.Length)
                mySerial(mySerial.Length - 2) = Serial(i)
                Console.WriteLine("COM" & i & " geöffnet")
                AddHandler Serial(i).DataReceived, AddressOf ReadFromSerial
            Catch e As Exception
            End Try
        Next
        ReDim Preserve mySerial(mySerial.Length - 2)
        While (True)
            SendToAllSerial(Console.ReadKey(True).KeyChar)
        End While

    End Sub
    Sub SendToAllSerial(ByVal txt As String)
        For i As Integer = 0 To mySerial.Length - 1
            mySerial(i).Write(txt)
        Next
    End Sub

    Public Sub ReadFromSerial(ByVal sender As Object, ByVal e As EventArgs)
        Dim sIn As SerialPort = sender
        Dim sData As String = sIn.ReadExisting
        ' Console.WriteLine("[" & sIn.PortName & "]" & sData)
        Console.Write(sData)
    End Sub

End Module