2010-09-28 2 views
2

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

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

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

ответ

0
  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 Family Controller - Планировщик пакетов Miniport Текущая Bandwidth: 100000000 Имя: Интерфейс MS TCP Loopback Current Bandwidth: 10000000 Нажмите любую клавишу для продолжения. , ,

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

+1

Спасибо за ваше предложение, но, к сожалению, это меня не помогает - я уже пытался использовать свойство «Имя», однако я не могу полагаться на него, и я также не могу связать его с ip-адресом адаптера. Свойство «Имя» имеет более или менее случайное специфическое для поставщика содержимое, и для разных серверов и сетевых адаптеров это может быть совершенно другим. Таким образом, ваше предложение работает нормально для одной системы, где я знаю, какой адаптер это, но поскольку мне приходится запрашивать множество разных серверов, мне в идеале нужен ip-адрес адаптера. – Gorgsenegger

0

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

  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 18".
  3. Запросите реестр для ключа «FriendlyName» на пути, который вы получили выше.
  4. Если присутствует клавиша «FriendlyName», введите ее строковое значение. Если ключ «FriendlyName» не определен, вместо этого используйте значение «Описание» из Win32_NetworkAdapter.
  5. Возьмите строку, которую вы получили на шаге 4, и замените все экземпляры «/» и «#» на знак подчеркивания «_».
  6. Полученная строка с шага 5 должна соответствовать свойству «Имя» в Win32_PerfFormattedData_Tcpip_NetworkInterface.