本文目录导读:

Windows系统(使用PowerShell)
这是Windows最推荐的方法,无需额外安装软件。
方法1:获取详细的硬件ID
# 获取显卡的硬件ID(包含VEN和DEV)
Get-WmiObject Win32_PnpEntity | Where-Object {$_.ConfigManagerErrorCode -eq 0 -and $_.PNPDeviceID -like "*VEN_*"} | Where-Object {$_.PNPDeviceID -like "*DISPLAY*" -or $_.Name -like "*NVIDIA*" -or $_.Name -like "*AMD*" -or $_.Name -like "*Intel*"} | Select-Object Name, PNPDeviceID
输出示例:
Name PNPDeviceID
---- -----------
NVIDIA GeForce... PCI\VEN_10DE&DEV_1F02&SUBSYS_...
方法2:仅提取VEN和DEV代码
# 更精简的提取
Get-CimInstance Win32_VideoController | ForEach-Object {
$deviceID = $_.PNPDeviceID
if ($deviceID -match "VEN_(.*?)&DEV_(.*?)&") {
Write-Output "Vendor ID: $($matches[1])"
Write-Output "Device ID: $($matches[2])"
Write-Output "Combined ID: $($matches[1])_$($matches[2])"
}
}
方法3:使用One-liner(一行命令)
(Get-WmiObject Win32_VideoController).PNPDeviceID -replace '.*VEN_|&DEV_|&SUBSYS.*' -replace '^.*?(....)','$1'
Linux系统(使用Shell脚本)
方法1:使用lspci(最常用)
#!/bin/bash
# 获取显卡识别码
GPU_INFO=$(lspci -nn | grep -E "VGA|3D|Display")
echo "显卡信息: $GPU_INFO"
# 提取VEN和DEV ID
VEN_DEV=$(echo $GPU_INFO | grep -oP '\[10DE:\K[0-9A-F]{4}')
echo "设备ID (DEV): $VEN_DEV"
输出示例:
显卡信息: 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106 [GeForce RTX 3060] [10de:2503] (rev a1)
设备ID (DEV): 2503
方法2:使用lshw(更详细)
#!/bin/bash
sudo lshw -C display | grep -E "vendor|product" | awk '{print $2}'
方法3:直接从PCI设备文件读取
#!/bin/bash
# 查找第一个VGA控制器
for dir in /sys/class/drm/card*/device; do
if [ -d "$dir" ]; then
VENDOR=$(cat "$dir/vendor" 2>/dev/null)
DEVICE=$(cat "$dir/device" 2>/dev/null)
if [ -n "$VENDOR" ] && [ -n "$DEVICE" ]; then
echo "Vendor: $VENDOR, Device: $DEVICE"
echo "Combined ID: ${VENDOR:2}_${DEVICE:2}"
fi
fi
done
跨平台解决方案(Python)
如果需要同时支持Windows和Linux,可以使用Python脚本:
import platform
import subprocess
import re
def get_gpu_id():
system = platform.system()
if system == "Windows":
try:
result = subprocess.run(
['wmic', 'path', 'Win32_VideoController', 'get', 'PNPDeviceID'],
capture_output=True, text=True, check=True
)
ids = []
for line in result.stdout.split('\n'):
if 'VEN_' in line:
match = re.search(r'VEN_(\w+)&DEV_(\w+)', line)
if match:
ids.append(f"{match.group(1)}_{match.group(2)}")
return ids
except:
return []
elif system == "Linux":
try:
result = subprocess.run(
['lspci', '-nn'], capture_output=True, text=True, check=True
)
ids = []
for line in result.stdout.split('\n'):
if 'VGA' in line or '3D' in line:
match = re.search(r'\[(\w+):(\w+)\]', line)
if match:
ids.append(f"{match.group(1)}_{match.group(2)}")
return ids
except:
return []
return []
if __name__ == "__main__":
gpu_ids = get_gpu_id()
for gpu_id in gpu_ids:
print(f"显卡识别码: {gpu_id}")
常用显卡供应商ID对照表
| 供应商 | VEN ID | 常见DEV ID示例 |
|---|---|---|
| NVIDIA | 10DE | 1F02 (RTX 3060), 2204 (RTX 4090) |
| AMD | 1002 | 731F (RX 7900 XTX), 67DF (RX 5700) |
| Intel | 8086 | 9A60 (UHD 730), 4690 (Arc A770) |
使用建议
- Windows用户:直接使用PowerShell方法
- Linux用户:使用
lspci -nn命令 - 跨平台需求:使用Python脚本
- 批量获取:将脚本保存为
.ps1或.sh文件,循环执行
这些脚本返回的识别码(如10DE_2503)是唯一的硬件标识,可用于驱动匹配、硬件验证等场景。