Как запросить конкретные адаптеры в Win32_PerfFormattedData_Tcpip_NetworkInterface? - PullRequest
2 голосов
/ 28 сентября 2010

Как я могу запросить определенные адаптеры (в идеале на основе IP-адреса) из Win32_PerfFormattedData_Tcpip_NetworkInterface?Я потратил некоторое время на поиск этой проблемы, но не нашел решения.

Я пытался использовать Win32_NetworkAdapter и Win32_NetworkAdapterConfiguration, однако не могу связать их с данными о производительности.

Поскольку в некоторых системах у меня более одного сетевого адаптера, я не могу определить, к какому адаптеру относятся возвращаемые значения - есть идеи?

Ответы [ 2 ]

0 голосов
/ 29 июня 2013

Вот как я это сделал.

  1. Запрос экземпляров Win32_NetworkAdapter, которые вас интересуют.
  2. Возьмите значение 'PNPDeviceID' из каждого Win32_NetworkAdapter и добавьте его в "\ HKLM \ SYSTEM \ CurrentControlSet \ Enum \", чтобы получить путь реестра к информации на адаптере. Вот пример: "\ HKLM \ SYSTEM \ CurrentControlSet \ Enum \ PCI \ VEN_8086 & DEV_100E & SUBSYS_001E8086 & REV_02 \ 3 & 267A616A & 0 & 18".
  3. Запросите реестр для ключа «FriendlyName» по указанному выше пути.
  4. Если ключ «FriendlyName» присутствует, то принять его строковое значение. Если ключ «FriendlyName» не определен, вместо этого используйте значение ключа «Description» из Win32_NetworkAdapter.
  5. Возьмите строку, полученную на шаге # 4, и замените все вхождения "/" и "#" на подчеркивание "_".
  6. Результирующая строка из шага # 5 должна соответствовать свойству «Name» в Win32_PerfFormattedData_Tcpip_NetworkInterface.
0 голосов
/ 10 октября 2010
            ConnectionOptions connection = new ConnectionOptions();
            ManagementScope scope = new ManagementScope("\\root\\CIMV2", connection);
            scope.Connect();

            ObjectQuery query = new ObjectQuery(
                "SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface");

            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher(scope, query);

            foreach (ManagementObject queryObj in searcher.Get())
            {
                Console.WriteLine("Name: {0}", queryObj["Name"]);
                Console.WriteLine("Current Bandwidth: {0}", queryObj["CurrentBandwidth"]);
            }

Мой вывод был

Имя: Контроллер семейства Realtek PCIe GBE - Минипорт планировщика пакетов Текущая пропускная способность: 100000000 Имя: интерфейс MS TCP Loopback Текущая пропускная способность: 10000000 Нажмите любую клавишу для продолжения . , .

Подобным образом вы можете улучшить свойства этого класса Win32_

...