怎么用脚本获取显示适配器信息(全平台终极指南)
📑 目录导读
- 为什么要用脚本获取显示适配器?
- Windows平台:PowerShell脚本实战
- Linux平台:Bash与硬件探测
- macOS平台:system_profiler详解
- 跨平台解决方案:Python+WMI/pyadapter
- 常见问题与错误解决
- 问答环节:你关心的都在这里
为什么要用脚本获取显示适配器?
在日常运维、开发调试、系统排查或硬件信息统计中,显示适配器(GPU/显卡) 的信息至关重要,传统的手动查看(如Windows的设备管理器、Linux的lspci)虽直观,但面对成百上千台服务器或自动化部署场景时,脚本化才是唯一出路。

脚本获取的优势:
- ✅ 批量处理:一键扫描所有机器,输出统一格式
- ✅ 远程执行:通过SSH、WinRM等协议即可远程获取
- ✅ 集成监控:可作为指标喂给Prometheus、Zabbix等
- ✅ 无GUI依赖:纯命令行,适用于无桌面的服务器
Windows平台:PowerShell脚本实战
1 最简洁的WMI查询
# 获取所有显示适配器信息(包括型号、驱动、显存等) Get-WmiObject Win32_VideoController | Format-List # 如果你想只提取核心字段: Get-WmiObject Win32_VideoController | Select-Object Name, DriverVersion, AdapterRAM, Status
2 使用CIM(更现代,支持远程)
# 本地查询
Get-CimInstance -ClassName Win32_VideoController | Format-Table -AutoSize
# 远程查询(需管理员权限和WinRM配置)
$computers = @("Server1", "Server2")
Invoke-Command -ComputerName $computers -ScriptBlock {
Get-CimInstance -ClassName Win32_VideoController |
Select-Object PSComputerName, Name, AdapterRAM, DriverVersion
} | Export-Csv -Path "gpu_info.csv" -NoTypeInformation
3 输出示例
Name : NVIDIA GeForce RTX 3060
DriverVersion : 31.0.15.3742
AdapterRAM : 12884901888 (12GB)
Status : OK
PNPDeviceID : PCI\VEN_10DE\DEV_2504...
4 高级技巧:检测多GPU
若机器有多个显卡(例如集显+独显),脚本会自动列出所有,你可以通过Name字段区分:
$gpus = Get-WmiObject Win32_VideoController
$gpus.Count # 查看数量
$gpus | Where-Object {$_.Name -like "*Intel*"} # 筛选集显
Linux平台:Bash与硬件探测
1 标准方法:lspci + greplspci
# 检测所有VGA/3D控制器
lspci | grep -E "VGA|3D|Display"
# 更详细的信息(含厂商ID、设备ID)
lspci -v -s $(lspci | grep VGA | awk '{print $1}') | grep -E "Subsystem|Memory|Kernel driver"
2 使用lshw(需安装)
# 安装 sudo apt install lshw # Debian/Ubuntu sudo yum install lshw # CentOS/RHEL # 获取GPU信息 sudo lshw -C display
3 一行脚本输出纯净JSON
适合集成到自动化工具:
#!/bin/bash
# 输出格式:GPU名称 | 驱动 | 显存
for gpu in $(lspci | grep -E "VGA|3D" | awk '{print $1}'); do
name=$(lspci -v -s $gpu | grep "Subsystem" | cut -d: -f2-)
driver=$(lspci -v -s $gpu | grep "Kernel driver" | awk '{print $5}')
memory=$(lspci -v -s $gpu | grep "Memory" | head -1)
echo "GPU: $name | Driver: $driver | Mem: $memory"
done
4 针对NVIDIA显卡的特殊处理
# 如果有nvidia-smi,直接取最准确信息 nvidia-smi --query-gpu=name,memory.total,driver_version --format=csv,noheader
输出示范:
NVIDIA GeForce RTX 4060, 8192 MiB, 545.23.06
macOS平台:system_profiler详解
1 基本命令
# 获取所有显卡信息 system_profiler SPDisplaysDataType # 仅提取芯片组型号 system_profiler SPDisplaysDataType | grep "Chipset Model"
2 输出示例
Graphics/Displays:
Intel Iris Plus Graphics 640:
Chipset Model: Intel Iris Plus Graphics 640
Type: GPU
Bus: Built-In
VRAM (Dynamic, Max): 1536 MB
Vendor: Intel
Device ID: 0x5927
Revision ID: 0x0006
Metal Support: Metal 2
3 脚本化提取核心字段
#!/bin/bash
# 提取显卡型号和显存
model=$(system_profiler SPDisplaysDataType | grep "Chipset Model" | awk -F': ' '{print $2}')
vram=$(system_profiler SPDisplaysDataType | grep "VRAM" | awk -F': ' '{print $2}')
echo "{\"GPU\": \"$model\", \"VRAM\": \"$vram\"}"
跨平台解决方案:Python+WMI/pyadapter
1 Python通用脚本(支持Win/Lin/Mac)
import platform
import subprocess
def get_gpu_info():
os_name = platform.system()
info = {}
if os_name == "Windows":
import wmi
c = wmi.WMI()
for gpu in c.Win32_VideoController():
info[gpu.Name] = {
"driver": gpu.DriverVersion,
"ram": gpu.AdapterRAM,
"status": gpu.Status
}
elif os_name == "Linux":
try:
result = subprocess.run(["lspci"], capture_output=True, text=True)
lines = result.stdout.split("\n")
for line in lines:
if "VGA" in line or "3D" in line:
info["gpu"] = line.split(":")[-1].strip()
except:
info["error"] = "lspci not available"
elif os_name == "Darwin": # macOS
result = subprocess.run(
["system_profiler", "SPDisplaysDataType"],
capture_output=True, text=True
)
for line in result.stdout.split("\n"):
if "Chipset Model" in line:
info["gpu"] = line.split(":")[-1].strip()
return info
print(get_gpu_info())
2 使用专业库:pyadapter
pip install pyadapter
from pyadapter import get_adapters
adapters = get_adapters()
for adapter in adapters:
print(adapter.name, adapter.vram_gb, adapter.driver_version)
优点:自动适配所有主流操作系统,输出标准化。
常见问题与错误解决
1 脚本运行后无输出
- Windows:请以管理员身份运行PowerShell
- Linux:某些系统需要
sudo lspci - macOS:无需root,但部分信息可能受限
2 找不到显卡(尤其是虚拟机)
- 虚拟化环境默认使用模拟显卡,例如VMware的
SVGA II,不会显示物理GPU - 若需直通显卡(GPU Passthrough),需在Hypervisor中配置
3 显存显示为0或异常
- 某些集成显卡使用动态共享内存(如Intel Iris),
AdapterRAM可能为0 - 此时可以通过
wmic path Win32_VideoController get CurrentHorizontalResolution验证是否工作
问答环节:你关心的都在这里
Q1:我想获取所有计算机的显卡信息,有什么最快的方法? A:如果你的环境是Windows域环境,推荐使用PowerShell远程执行(Invoke-Command);如果是混合环境,建议部署Agent(如Python脚本打包成exe或使用SSH批量push)。
Q2:脚本返回的显存是字节,如何换算成GB? A:以PowerShell为例,直接除1073741824即可:
$ramGB = [math]::Round($gpu.AdapterRAM / 1GB, 2)
Q3:如何检测显卡是否正常工作?
A:在Windows下检测Status字段是否为"OK";在Linux下可以用nvidia-smi或glxinfo测试;macOS下可使用system_profiler看有没有"Error"标记。
Q4:NVIDIA vs AMD vs Intel,脚本是否通用?
A:完全通用!脚本只读取系统API或PCI设备信息,不依赖品牌,但特定品牌工具(如nvidia-smi、rocm-smi)能提供更详细的GPU利用率、温度等指标。
Q5:有没有不需要安装任何软件就能获取的方法? A:有!所有主流操作系统都内置了命令行工具(PowerShell、lspci、system_profiler),Python也属于标准库,一行命令都不用装额外包。
本文涵盖了Windows/Linux/macOS三大平台的脚本化获取显示适配器信息的方法,从基础命令到跨平台解决方案,再到常见错误问答,力求让你“读一篇精通一个技能”,如果你正在做自动化运维或硬件普查,直接复制上面任意脚本即可投入生产环境。
✨ 提示:建议保存上述Python脚本为get_gpu.py,可同时运行于Windows、Linux、macOS,是团队标准化工具的不二之选。