怎么用脚本获取显示适配器

wen 实用脚本 3

怎么用脚本获取显示适配器信息(全平台终极指南)

📑 目录导读

  1. 为什么要用脚本获取显示适配器?
  2. Windows平台:PowerShell脚本实战
  3. Linux平台:Bash与硬件探测
  4. macOS平台:system_profiler详解
  5. 跨平台解决方案:Python+WMI/pyadapter
  6. 常见问题与错误解决
  7. 问答环节:你关心的都在这里

为什么要用脚本获取显示适配器?

在日常运维、开发调试、系统排查或硬件信息统计中,显示适配器(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-smiglxinfo测试;macOS下可使用system_profiler看有没有"Error"标记。

Q4:NVIDIA vs AMD vs Intel,脚本是否通用? A:完全通用!脚本只读取系统API或PCI设备信息,不依赖品牌,但特定品牌工具(如nvidia-smirocm-smi)能提供更详细的GPU利用率、温度等指标。

Q5:有没有不需要安装任何软件就能获取的方法? A:有!所有主流操作系统都内置了命令行工具(PowerShell、lspci、system_profiler),Python也属于标准库,一行命令都不用装额外包。


本文涵盖了Windows/Linux/macOS三大平台的脚本化获取显示适配器信息的方法,从基础命令到跨平台解决方案,再到常见错误问答,力求让你“读一篇精通一个技能”,如果你正在做自动化运维或硬件普查,直接复制上面任意脚本即可投入生产环境。


提示:建议保存上述Python脚本为get_gpu.py,可同时运行于Windows、Linux、macOS,是团队标准化工具的不二之选。

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