如何从MSFT_NetAdapter发现PCI信息

问题描述 投票:0回答:1

我正在通过所有网络适配器进行硬件清单,需要记录详细信息,包括速度,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)
python windows wmi
1个回答
1
投票

以下代码段可能会有所帮助。它通过MSFT_NetAdapterMSFT_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 ===')

0
投票

约瑟夫或企鹅,我发布了一个问题,人们不想回答我,我无法向人们发送消息,或者我无法加入聊天,因为我没有代表,如果我不等三天,我也无法发布问题,我可以问一个简单的phyton吗请问问题?

© www.soinside.com 2019 - 2024. All rights reserved.