Я делаю инвентаризацию оборудования по всем сетевым адаптерам и мне необходимо записать данные, включая скорость, адрес MA C и данные PCI. Я нашел большую часть того, что мне нужно, сканируя через MSFT_NetAdapter и собирая те, которые включают PCI Vendor и идентификаторы устройств, однако информация о расположении шины, по-видимому, отсутствует.
После некоторого поиска в Google я обнаружил MSFT_NetAdapterHardwareInfoSettingData, который имел что мне нужно, но я не уверен, как программно go от одного к другому. У меня есть PnPDeviceID из первого объекта, который, кажется, включает в себя номер экземпляра в суффиксе, но я не уверен, как использовать это для поиска в другом. Насколько я могу судить, для сопоставления можно использовать только поле «Имя», но это звучит как ненадежное решение. Есть ли какой-нибудь способ сделать точный поиск между двумя классами объектов WMI?
Я использую Python 3.8.1 (64-разрядная версия) с последней версией pywin32 и WMI 1.4.9 в качестве удобная обертка для него, но я ожидаю, что будет полезно любое решение, описанное с точки зрения надлежащего взаимодействия с WMI.
Обновление: Ответ от @JosefZ был тем, что я искал. Я взял его пример и сделал его немного более похожим на Pythoni c, поскольку на данный момент мне не нужна полная гибкость WQL:
import wmi
wnamespace = wmi.WMI(namespace="StandardCimv2")
for adapter in wnamespace.MSFT_NetAdapter():
print('Adapter:', adapter.Name, adapter.InstanceID)
for proprty in wnamespace.MSFT_NetAdapterHardwareInfoSettingData(InstanceID=adapter.InstanceID):
print('Result:', proprty.InstanceID, adapter.Name, proprty.Name)