本文目录导读:

获取硬件固件版本的具体方法取决于你的硬件类型(如主板、硬盘、网卡、BIOS等)和操作系统,以下是几种常见场景的脚本示例:
Linux 系统
获取多个硬件固件版本的综合脚本
#!/bin/bash
echo "=== 系统固件信息 ==="
echo "BIOS版本:"
sudo dmidecode -s bios-version 2>/dev/null || echo "需要root权限"
echo -e "\n主板固件:"
sudo dmidecode -t baseboard 2>/dev/null | grep -i "Version"
echo -e "\n硬盘固件版本:"
for disk in /dev/sd[a-z]; do
if [ -b "$disk" ]; then
echo -n "$disk: "
sudo smartctl -i $disk 2>/dev/null | grep "Firmware Version" | awk '{print $NF}'
fi
done
echo -e "\n网卡固件:"
for iface in /sys/class/net/*; do
iface_name=$(basename $iface)
if [ "$iface_name" != "lo" ]; then
echo -n "$iface_name: "
sudo ethtool -i $iface_name 2>/dev/null | grep firmware-version | awk '{print $2}'
fi
done
echo -e "\nGPU固件:"
if command -v nvidia-smi &> /dev/null; then
nvidia-smi --query-gpu=name,driver_version --format=csv,noheader
elif command -v amdgpu&> /dev/null; then
cat /sys/class/drm/card*/device/uevent | grep firmware
fi
仅获取BIOS/UEFI版本
#!/bin/bash
# 方法1: 使用dmidecode
if [ "$EUID" -eq 0 ]; then
dmidecode -s bios-version
dmidecode -s bios-release-date
else
echo "请使用 sudo 运行此脚本"
fi
Windows 系统 (PowerShell)
获取主要硬件固件版本
# 获取BIOS版本
Write-Host "BIOS Version:"
Get-WmiObject Win32_BIOS | Select-Object SMBIOSBIOSVersion, Manufacturer, Name
Write-Host "`n硬盘固件版本:"
Get-WmiObject Win32_DiskDrive | Select-Object Model, FirmwareRevision
Write-Host "`n网卡固件版本:"
Get-NetAdapter | ForEach-Object {
$adapter = Get-NetAdapterHardwareInfo -Name $_.Name
[PSCustomObject]@{
Name = $_.Name
FirmwareVersion = $adapter.FirmwareVersion
}
}
# 获取显卡驱动版本(部分显卡包含固件信息)
Write-Host "`n显卡信息:"
Get-WmiObject Win32_VideoController | Select-Object Name, DriverVersion
更详细的固件信息脚本
function Get-FirmwareVersions {
Write-Host "=== 硬件固件版本信息 ===" -ForegroundColor Green
# BIOS/UEFI
$bios = Get-CimInstance -ClassName Win32_BIOS
Write-Host "`nBIOS/UEFI:" -ForegroundColor Cyan
Write-Host " 版本: $($bios.SMBIOSBIOSVersion)"
Write-Host " 日期: $($bios.ReleaseDate)"
# 硬盘/SSD
Write-Host "`n存储设备:" -ForegroundColor Cyan
Get-CimInstance -ClassName Win32_DiskDrive | ForEach-Object {
Write-Host " $($_.Model): 固件版本 $($_.FirmwareRevision)"
}
# 网卡
Write-Host "`n网络适配器:" -ForegroundColor Cyan
Get-NetAdapterHardwareInfo | Where-Object {$_.FirmwareVersion} | ForEach-Object {
Write-Host " $($_.Name): 固件版本 $($_.FirmwareVersion)"
}
# 主板
$board = Get-CimInstance -ClassName Win32_BaseBoard
Write-Host "`n主板信息:" -ForegroundColor Cyan
Write-Host " 制造商: $($board.Manufacturer)"
Write-Host " 产品: $($board.Product)"
Write-Host " 版本: $($board.Version)"
}
Get-FirmwareVersions
通用脚本 (跨平台)
Python 脚本(跨平台)
#!/usr/bin/env python3
import platform
import subprocess
import sys
def get_linux_firmware():
"""获取Linux系统固件信息"""
try:
# BIOS版本
result = subprocess.run(['sudo', 'dmidecode', '-s', 'bios-version'],
capture_output=True, text=True)
if result.returncode == 0:
print(f"BIOS版本: {result.stdout.strip()}")
# 硬盘固件
result = subprocess.run(['lsblk', '-o', 'NAME,MODEL,FIRMWARE-REV'],
capture_output=True, text=True)
print("\n存储设备固件:")
print(result.stdout)
except Exception as e:
print(f"错误: {e}")
def get_windows_firmware():
"""获取Windows系统固件信息"""
try:
import wmi
c = wmi.WMI()
# BIOS
for bios in c.Win32_BIOS():
print(f"BIOS版本: {bios.SMBIOSBIOSVersion}")
print(f"制造商: {bios.Manufacturer}")
# 硬盘
print("\n硬盘固件:")
for disk in c.Win32_DiskDrive():
print(f" {disk.Model}: {disk.FirmwareRevision}")
except ImportError:
print("需要安装wmi库: pip install wmi")
except Exception as e:
print(f"错误: {e}")
def main():
system = platform.system()
print(f"操作系统: {system}\n")
if system == "Linux":
get_linux_firmware()
elif system == "Windows":
get_windows_firmware()
else:
print(f"不支持的操作系统: {system}")
if __name__ == "__main__":
main()
使用方法
Linux:
# 给予执行权限 chmod +x firmware_check.sh # 使用root权限运行 sudo ./firmware_check.sh
Windows:
# 以管理员身份运行PowerShell Set-ExecutionPolicy RemoteSigned -Scope CurrentUser .\firmware_check.ps1
Python:
pip install wmi # Windows需要 python firmware_check.py
注意事项
- 权限要求:大多数硬件信息需要管理员/root权限
- 依赖工具:
- Linux:
dmidecode,smartctl,ethtool - Windows: PowerShell, WMI
- Linux:
- 安全警告:确保脚本来源可信,特别是需要root权限时
- 硬件差异:不同硬件制造商可能使用不同的固件版本格式
如果你有特定的硬件类型(如特定型号的服务器、嵌入式设备等),请提供更多信息,我可以给出更精确的解决方案。