【发布时间】:2020-01-09 17:09:15
【问题描述】:
我正在对所有网络适配器进行硬件清点,需要记录详细信息,包括速度、MAC 地址和 PCI 详细信息。我发现大部分我需要通过 MSFT_NetAdapter 扫描并收集包括 PCI 供应商和设备 ID 在内的大部分内容,但是总线位置信息似乎不存在。
经过一番谷歌搜索,我发现 MSFT_NetAdapterHardwareInfoSettingData 有我需要的东西,但我不确定如何以编程方式从一个到另一个。我有来自第一个对象的 PnPDeviceID,它似乎在后缀上包含一个实例编号,但我不确定如何使用它在另一个对象中搜索。据我所知,只有 Name 字段可以用来匹配它,但这听起来像是一个不可靠的解决方案。有什么方法可以在两类 WMI 对象之间进行精确搜索吗?
我正在使用带有最新 pywin32 和 WMI 1.4.9 的 Python 3.8.1(64 位)作为其方便的包装器,但我希望任何关于如何与 WMI 进行适当交互的解决方案都会有所帮助.
更新:@JosefZ 的答案正是我想要的。我以他的例子为例,使它在本质上更加 Pythonic,因为我目前不需要 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)
【问题讨论】: