CIM_LogicalDevice という奴で列挙したものを適当にフィルタリングするとそれっぽい感じ。
wql = "SELECT * FROM CIM_LogicalDevice "
wql = wql & "WHERE CreationClassName='Win32_SerialPort' OR DeviceID LIKE '%PORTS%'"
Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer
Set devices = Service.ExecQuery(wql)
For Each dev in devices
WScript.Echo dev.Name & vbTab & dev.CreationClassName & vbTab & dev.DeviceID
Next
COM??の番号の最大値を取る方法、ここから正規表現で引き抜けば大丈夫そうではあるが、もう少しうまく取る方法はないものか。