怎么用脚本获取显卡识别码

wen 实用脚本 2

本文目录导读:

怎么用脚本获取显卡识别码

  1. Windows系统(使用PowerShell)
  2. Linux系统(使用Shell脚本)
  3. 跨平台解决方案(Python)
  4. 常用显卡供应商ID对照表
  5. 使用建议

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)

使用建议

  1. Windows用户:直接使用PowerShell方法
  2. Linux用户:使用lspci -nn命令
  3. 跨平台需求:使用Python脚本
  4. 批量获取:将脚本保存为.ps1.sh文件,循环执行

这些脚本返回的识别码(如10DE_2503)是唯一的硬件标识,可用于驱动匹配、硬件验证等场景。

抱歉,评论功能暂时关闭!