如何通过位置路径查找对应PCI设备(Windows环境)
如何通过位置路径查找对应PCI设备(Windows环境)
嘿,我来帮你搞定这个问题!你之前的命令失败是因为直接把位置路径片段当成设备实例ID来用了——系统里的设备InstanceId格式和位置路径完全不同,不能直接截取位置路径的部分来查询。
下面给你几个靠谱的方法,不管用PowerShell还是手动操作都能找到目标PCI设备:
方法一:用PowerShell快速筛选匹配的设备
这条命令会遍历所有当前连接的设备,找出位置信息包含PCIROOT(0)#PCI(1400)的设备,直接输出它的名称、实例ID和完整位置路径:
Get-PnpDevice -PresentOnly | Where-Object { $_.Location -like "*PCIROOT(0)#PCI(1400)*" } | Select-Object FriendlyName, InstanceId, Location
如果输出结果里有多个设备,优先看“FriendlyName”里带“PCI”或“USB控制器”相关的条目,那就是你要找的父PCI设备。
方法二:精准匹配位置路径属性
如果上面的命令没找到,或者你需要更精准的结果,可以用这个遍历所有设备位置路径属性的脚本:
Get-PnpDevice -PresentOnly | ForEach-Object { # 尝试获取当前设备的位置路径属性 $locationProps = Get-PnpDeviceProperty -InstanceId $_.InstanceId -KeyName DEVPKEY_Device_LocationPaths -ErrorAction SilentlyContinue # 如果属性存在且包含目标路径片段,就输出设备信息 if ($locationProps -and $locationProps.Data -like "*PCIROOT(0)#PCI(1400)*") { [PSCustomObject]@{ 设备名称 = $_.FriendlyName 实例ID = $_.InstanceId 完整位置路径 = $locationProps.Data } } }
这个脚本会逐个检查设备的位置路径属性,确保不会漏掉任何匹配的设备。
方法三:手动在设备管理器中查找
如果你不想用PowerShell,也可以手动操作:
- 打开设备管理器,展开**“PCI Express Root Complex”或者“通用串行总线控制器”**分类(因为你的蓝牙设备是USB子设备,父PCI设备大概率是USB控制器);
- 逐个右键点击分类下的设备,选择「属性」→「详细信息」;
- 在“属性”下拉菜单中选择「位置路径」,查看是否包含
PCIROOT(0)#PCI(1400); - 找到匹配的那个设备,就是你要找的目标PCI设备啦。
备注:内容来源于stack exchange,提问作者stackbiz




