这样我就可以确定设备的传输速率并将其与 PCIE 设备的代数(PCIE 3.0、4.0 等)联系起来
答案1
此方法使用 WMI 总线 PnP 设备驱动程序属性
# Get all devices related to PCI BUS
$pciStats = (Get-WMIObject Win32_Bus -Filter 'DeviceID like "PCI%"').GetRelated('Win32_PnPEntity') |
foreach {
# request connection properties from wmi
[pscustomobject][ordered]@{
Name = $_.Name
ExpressSpecVersion=$_.GetDeviceProperties('DEVPKEY_PciDevice_ExpressSpecVersion').deviceProperties.data
MaxLinkSpeed =$_.GetDeviceProperties('DEVPKEY_PciDevice_MaxLinkSpeed' ).deviceProperties.data
MaxLinkWidth =$_.GetDeviceProperties('DEVPKEY_PciDevice_MaxLinkWidth' ).deviceProperties.data
CurrentLinkSpeed =$_.GetDeviceProperties('DEVPKEY_PciDevice_CurrentLinkSpeed' ).deviceProperties.data
CurrentLinkWidth =$_.GetDeviceProperties('DEVPKEY_PciDevice_CurrentLinkWidth' ).deviceProperties.data
} |
# only keep devices with PCI connections
Where MaxLinkSpeed
}
$pciStats | Format-Table -AutoSize
我的电脑上显示了如下表格:
Name ExpressSpecVersion MaxLinkSpeed MaxLinkWidth CurrentLinkSpeed CurrentLinkWidth
---- ------------------ ------------ ------------ ---------------- ----------------
High Definition Audio Controller 2 4 16 3 16
NVIDIA GeForce RTX 3070 2 4 16 3 16
Intel(R) Dual Band Wireless-AC 8 2 1 1 1 1
ASMedia USB 3.1 eXtensible Host 2 3 2 3 2
Standard NVM Express Controller 2 3 4 3 4
该ExpressSpecVersion
属性是 PCIe 版本,其中 PCIe 1.0 =0
和 PCIe 3.0 =2
等。其他属性的整数值并不难找到,只需通过谷歌搜索其驱动程序键名称即可,例如DEVPKEY_PciDevice_MaxLinkSpeed
这些属性适用于命名的设备,并且不是主板上的 PCI 插槽。WMI 似乎没有列举有关 pci 端口的信息,尤其是断开连接的端口。