怎么用脚本获取主板信息

wen 实用脚本 2

**
《硬件侦察兵:用脚本精准获取主板型号、序列号与BIOS信息的终极指南》

怎么用脚本获取主板信息


目录导读

  1. 为什么要用脚本获取主板信息?
  2. 跨平台脚本方案对比:WMIC、dmidecode、PowerShell
  3. 实战:Windows系统下的三种脚本写法(含代码拆解)
  4. 实战:Linux/macOS下的Bash与Python方案
  5. 常见问题问答(FAQ)
  6. 进阶技巧:将主板信息批量导出为JSON/CSV

为什么要用脚本获取主板信息?
运维人员排查硬件故障、IT资产管理、软件授权绑定(如CAD、VMware许可)时,都需要主板序列号或BIOS版本,手动通过图形界面查看不仅慢,而且无法批量操作,脚本化获取能让你在10秒内收集上千台设备的主板数据,并自动生成报表。

跨平台脚本方案对比

操作系统 核心工具 输出格式 权限要求
Windows WMIC / PowerShell 文本/对象 普通用户可读序列号
Linux dmidecode 文本/JSON 需要root权限
macOS system_profiler 文本 普通用户可用

注意:Windows 11 已移除WMIC(建议用PowerShell),而Linux的dmidecode依赖DMI表,虚拟机上可能返回“Not Specified”。

实战:Windows系统下的三种脚本写法

方法A:经典WMIC(兼容Win7/10)

wmic baseboard get Manufacturer,Product,SerialNumber,Version  

输出示例:

Manufacturer  Product       SerialNumber      Version  
LENOVO        20HQS00X00    PF1X9X2X          SDK0J40709 WIN  

方法B:PowerShell(推荐Win10/11)

Get-WmiObject Win32_BaseBoard | Select-Object Manufacturer,Product,SerialNumber,Version | Format-List  

高级变体:获取BIOS信息

Get-CimInstance -ClassName Win32_BIOS | Select-Object SMBIOSBIOSVersion,ReleaseDate,SerialNumber  

方法C:纯命令行 + 输出重定向(批量脚本)

echo 主板信息 > pc_info.txt  
wmic baseboard get Manufacturer,Product >> pc_info.txt  
wmic bios get SMBIOSBIOSVersion >> pc_info.txt  

实战:Linux/macOS下的Bash与Python方案

Linux(需sudo):

sudo dmidecode -t baseboard | grep -E "Manufacturer|Product Name|Serial Number"  

脚本进阶(输出为一行):

sudo dmidecode -t baseboard | awk -F': ' '/Manufacturer|Product Name|Serial Number/{printf "%s,",$2} END{print ""}'  

macOS一行命令:

system_profiler SPHardwareDataType | grep "Model Identifier"  

但macOS不直接暴露主板序列号,可结合ioreg -l | grep IOPlatformSerialNumber获取等效ID。

Python跨平台脚本(推荐):

import subprocess, sys, json  
def get_windows_mb():  
    from subprocess import check_output  
    raw = check_output("wmic baseboard get Manufacturer,Product,SerialNumber", shell=True).decode()  
    return dict(line.split("  ") for line in raw.split("\n")[1:] if line.strip())  
def get_linux_mb():  
    raw = subprocess.check_output("sudo dmidecode -t baseboard", shell=True).decode()  
    data = {}  
    for line in raw.split("\n"):  
        if "Manufacturer:" in line: data["Manufacturer"] = line.split(":")[1].strip()  
        if "Product Name:" in line: data["Product"] = line.split(":")[1].strip()  
        if "Serial Number:" in line: data["Serial"] = line.split(":")[1].strip()  
    return data  
if sys.platform.startswith("win"): print(json.dumps(get_windows_mb()))  
else: print(json.dumps(get_linux_mb()))  

常见问题问答(FAQ)

Q1:为什么脚本返回的主板序列号是空白或“To be filled by O.E.M.”?
A:这是主板制造商的出厂默认值,多见于组装机,品牌机(如Dell、HP)通常有真实序列号,若需要追踪硬件,可改用CPU ID或MAC地址作为辅助标识。

Q2:在虚拟机(VMware/VirtualBox)中执行dmidecode为什么失败?
A:虚拟机默认不暴露真实DMI信息,可在VMware配置文件中添加smbios.reflectHost = "TRUE"来透传物理机信息,但存在安全风险,不建议生产环境使用。

Q3:如何远程批量获取局域网内电脑的主板信息?
A:使用PowerShell远程会话(需开启WinRM):

Invoke-Command -ComputerName PC01,PC02 -ScriptBlock { Get-WmiObject Win32_BaseBoard | Select-Object PSComputerName,Manufacturer,SerialNumber }  

或者用Python的paramiko库通过SSH执行Linux脚本。

Q4:能否在脚本中判断主板是否支持TPM 2.0?
A:可以,Windows下运行Get-Tpm命令(需管理员权限),Linux下运行bootctl status | grep TPM,脚本可结合条件判断输出“支持/不支持”。

进阶技巧:将主板信息批量导出为JSON/CSV

PowerShell生成CSV:

Get-WmiObject Win32_BaseBoard | Export-Csv -Path "mb_info.csv" -NoTypeInformation  

Python生成结构化JSON(合并BIOS数据):

import json, subprocess, sys  
def get_all():  
    if sys.platform.startswith("win"):  
        mb = subprocess.check_output("wmic baseboard get Manufacturer,Product,SerialNumber /format:csv", shell=True).decode()  
        bios = subprocess.check_output("wmic bios get SMBIOSBIOSVersion /format:csv", shell=True).decode()  
        return {"mb": mb, "bios": bios}  
    else:  
        return {"mb": get_linux_mb(), "bios": subprocess.check_output("cat /sys/class/dmi/id/bios_version", shell=True).decode()}  
print(json.dumps(get_all(), indent=2))  

结尾技术总结
掌握脚本获取主板信息的能力,是运维自动化的第一块敲门砖,无论你是用Windows下的PowerShell还是Linux下的dmidecode,核心逻辑都是调用系统API读取DMI/SMBIOS表,推荐优先使用Python封装跨平台逻辑,这样你写一次脚本,就能在混合环境中通用,且便于后续扩展(比如自动对比资产数据库),当你的脚本能稳定输出JSON时,就可以对接Zabbix、Prometheus等监控系统,实现硬件生命周期全自动管理。

(提示:脚本中涉及敏感信息(如序列号)时,请务必对输出做权限控制,避免泄露到日志系统。)

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