Hazel J Chua Ответов: 2

Запрос WMI не возвращает никаких значений


Привет,

Я пытаюсь запросить WMI для подключения последовательных портов (COM-портов). Я вижу порты в Диспетчере устройств, но при попытке запросить их через WMI (Win32_SerialPort) ничего не появляется. Я могу подключиться к одному из портов (COM7) через Гипертерминал. Это GSM/GPRS-модем, к которому я пытаюсь подключиться с помощью C#.

Описание В диспетчере устройств для модема-HSPADatacard NMEA Device (COM7).

Попытка сделать это на машине Win10.

Любая помощь очень ценится.

Что я уже пробовал:

При запуске cmd с правами администратора команда "mode" действительно отражает дополнительные COM-порты при подключении модема.

Использование WMICodeCreator для генерации VBscript для отчета о портах также не дало никаких результатов.

Сгенерированный скрипт:
strComputer = "." 
<pre>Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_SerialPort",,48) 
For Each objItem in colItems 
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "Win32_SerialPort instance"
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "Caption: " & objItem.Caption
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "DeviceID: " & objItem.DeviceID
    Wscript.Echo "Name: " & objItem.Name
Next

2 Ответов

Рейтинг:
7

Hazel J Chua

@Jochen Arndt, попытался изменить запрос на использование MSSerial_PortName, и все, что я получил, - это ошибка в запросе без возврата результатов.

После некоторого чтения следующий запрос действительно сработал:

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%COM%' AND PNPClass = 'Ports'",,48) 
For Each objItem in colItems 
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "Win32_PnPEntity instance"
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "Caption: " & objItem.Caption
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "DeviceID: " & objItem.DeviceID
    If isNull(objItem.HardwareID) Then
        Wscript.Echo "HardwareID: "
    Else
        Wscript.Echo "HardwareID: " & Join(objItem.HardwareID, ",")
    End If
    Wscript.Echo "Manufacturer: " & objItem.Manufacturer
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "PNPClass: " & objItem.PNPClass
    Wscript.Echo "PNPDeviceID: " & objItem.PNPDeviceID
Next


Это привело к появлению выходных данных :
Цитата:
-----------------------------------
Экземпляр Win32_PnPEntity
-----------------------------------
Подпись: устройство HSPADataCard NMEA (COM7)
Описание: устройство HSPADataCard NMEA
Свойство DeviceID: VID_19D2\USB и усилителя;PID_0082&амп;\MI_01 6&&усилителя 1C9A94D5;0&амп;0001
Hardwareidне: VID_19D2\USB и усилителя;PID_0082 усилителя;amp; REV_0000&амп;, VID_19D2\USB и усилитель MI_01;PID_0082 усилителя;amp; MI_01
Производитель: HSPADataCard
Имя: устройство HSPADataCard NMEA (COM7)
Pnp Class: Порты
PNPDeviceID: VID_19D2\USB и усилителя;PID_0082&амп;\MI_01 6&&усилителя 1C9A94D5;0&амп;0001


Следующим шагом будет запрос и/или установка соответствующих параметров порта (таких как скорость передачи данных, четность и т. д)


Рейтинг:
0

Jochen Arndt

То Класс Win32\_SerialPort | Microsoft Docs[^] перечисляет только физические последовательные порты, а не виртуальные, предоставляемые драйверами устройств.

Одним из решений является использование MSSerial_PortName класс в центре города \root\WMI пространство имен. Смотреть также Список SerialPorts, запрашиваемых с помощью WMI, отличается от devicemanager? - переполнение стека[^].