我正在通过所有网络适配器进行硬件清单,需要记录详细信息,包括速度,MAC地址和PCI详细信息。我已经找到了我需要扫描的大多数内容,包括MSFT_NetAdapter并收集了包括PCI供应商和设备ID在内的信息,但是,总线位置信息似乎不存在。
经过一番谷歌搜索后,我发现了MSFT_NetAdapterHardwareInfoSettingData,它具有我所需要的,但是我不确定如何以编程方式从一个过渡到另一个。我有第一个对象的PnPDeviceID,该对象似乎在后缀中包含实例号,但是我不确定如何使用该实例号在另一个对象中进行搜索。据我所知,只能使用“名称”字段来进行匹配,但这听起来是不可靠的解决方案。有两种方法可以在两类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)
以下代码段可能会有所帮助。它通过MSFT_NetAdapter
和MSFT_NetAdapter
wmi类的相应实例通过键属性配对(请参见此处提供的链接以及下面的注释):
MSFT_NetAdapterHardwareInfoSettingData
[Output from MSFT_NetAdapterHardwareInfoSettingData
:
import wmi wnamespace = wmi.WMI( namespace="StandardCimv2") # key property = DeviceID wqlAdapter = "SELECT * FROM MSFT_NetAdapter" wrxAdapter = wnamespace.query( wqlAdapter) for adapter in wrxAdapter: # key property = InstanceID wql = "SELECT * FROM MSFT_NetAdapterHardwareInfoSettingData Where InstanceID='{}'".format(adapter.DeviceID) print( "querying adapter: {}".format(adapter.DeviceID)) # debugging wrx = wnamespace.query( wql) for proprty in wrx: print( ' resulting data:', proprty.InstanceID, adapter.Name, proprty.Name ) print( '=== End Of Script ===')
约瑟夫或企鹅,我发布了一个问题,人们不想回答我,我无法向人们发送消息,或者我无法加入聊天,因为我没有代表,如果我不等三天,我也无法发布问题,我可以问一个简单的phyton吗请问问题?