本文目录导读:

Linux系统固件更新检查
使用fwupd工具(推荐)
#!/bin/bash
# 检查系统固件更新
# 安装fwupd(如果未安装)
# sudo apt install fwupd
# 刷新固件仓库
fwupdmgr refresh
# 列出可用的更新
fwupdmgr get-updates
# 如果有更新,显示详细信息
if fwupdmgr get-updates | grep -q "Updates"; then
echo "发现固件更新:"
fwupdmgr get-updates
else
echo "没有可用的固件更新"
fi
使用dmidecode检查BIOS版本
#!/bin/bash
# 获取当前BIOS版本
BIOS_VERSION=$(sudo dmidecode -s bios-version)
BIOS_RELEASE=$(sudo dmidecode -s bios-release-date)
echo "当前BIOS版本: $BIOS_VERSION"
echo "发布日期: $BIOS_RELEASE"
# 检查是否有更新的版本(需要预先定义版本对照表)
LATEST_VERSION="2.15" # 示例版本
if [ "$BIOS_VERSION" != "$LATEST_VERSION" ]; then
echo "有新的固件更新可用!"
else
echo "固件已是最新版本"
fi
Windows系统固件更新检查
PowerShell脚本
# 检查Windows Update中的固件更新
$UpdateSession = New-Object -ComObject Microsoft.Update.Session
$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()
# 搜索固件更新
$SearchResult = $UpdateSearcher.Search("IsInstalled=0 and Type='Driver' and IsHidden=0")
Write-Host "检查固件更新..."
$FirmwareUpdates = @()
foreach ($Update in $SearchResult.Updates) {
if ($Update.Title -match "Firmware" -or $Update.Title -match "BIOS") {
$FirmwareUpdates += $Update
Write-Host "找到固件更新: $($Update.Title)"
}
}
if ($FirmwareUpdates.Count -eq 0) {
Write-Host "没有可用的固件更新"
}
使用WMI查询BIOS信息
# 获取当前BIOS版本
$BIOS = Get-WmiObject Win32_BIOS
Write-Host "当前BIOS版本: $($BIOS.SMBIOSBIOSVersion)"
Write-Host "制造商: $($BIOS.Manufacturer)"
# 检查设备制造商特定的更新(示例)
$Manufacturer = $BIOS.Manufacturer
switch ($Manufacturer) {
"Dell Inc." {
# 调用Dell Command Update API
Write-Host "检查Dell固件更新..."
# 具体实现取决于DCU的API
}
"LENOVO" {
# 使用Lenovo Update API
Write-Host "检查Lenovo固件更新..."
}
}
macOS系统固件更新检查
Bash脚本
#!/bin/bash
# 检查macOS固件更新
# 获取当前系统固件版本
FIRMWARE_VERSION=$(system_profiler SPHardwareDataType | grep "Boot ROM Version" | awk '{print $4}')
echo "当前固件版本: $FIRMWARE_VERSION"
# 使用softwareupdate检查更新
echo "检查系统更新..."
UPDATES=$(softwareupdate -l 2>&1)
if echo "$UPDATES" | grep -q "Firmware"; then
echo "发现固件更新:"
echo "$UPDATES" | grep "Firmware"
else
echo "没有可用的固件更新"
fi
通用版本检测脚本
#!/usr/bin/env python3
"""
跨平台固件版本检测脚本
"""
import platform
import subprocess
import json
def get_firmware_info():
"""获取固件信息"""
system = platform.system()
info = {}
if system == "Linux":
try:
# 使用dmidecode
result = subprocess.run(
['sudo', 'dmidecode', '-t', 'bios'],
capture_output=True, text=True
)
if result.returncode == 0:
for line in result.stdout.split('\n'):
if 'Version' in line:
info['version'] = line.split(':')[1].strip()
if 'Release Date' in line:
info['release_date'] = line.split(':')[1].strip()
except:
pass
elif system == "Windows":
try:
import wmi
c = wmi.WMI()
for bios in c.Win32_BIOS():
info['version'] = bios.SMBIOSBIOSVersion
info['manufacturer'] = bios.Manufacturer
except:
pass
elif system == "Darwin": # macOS
try:
result = subprocess.run(
['system_profiler', 'SPHardwareDataType', '-json'],
capture_output=True, text=True
)
data = json.loads(result.stdout)
info = data.get('SPHardwareDataType', [{}])[0]
except:
pass
return info
# 使用示例
if __name__ == "__main__":
firmware_info = get_firmware_info()
print("固件信息:")
for key, value in firmware_info.items():
print(f" {key}: {value}")
自动化更新脚本示例
#!/bin/bash
# 自动检查并更新固件(Linux示例)
# 配置
LOG_FILE="/var/log/firmware-update.log"
NOTIFY_EMAIL="admin@example.com"
# 执行检查
echo "[$(date)] 开始固件更新检查" >> $LOG_FILE
# 检查更新
fwupdmgr refresh >> $LOG_FILE 2>&1
UPDATES=$(fwupdmgr get-updates 2>&1)
if [ $? -eq 0 ] && echo "$UPDATES" | grep -q "Updates"; then
echo "发现新固件更新" >> $LOG_FILE
# 发送通知
echo "$UPDATES" | mail -s "固件更新可用" $NOTIFY_EMAIL
# 询问是否安装(或自动安装)
read -p "是否安装更新?(y/n): " ANSWER
if [ "$ANSWER" = "y" ]; then
fwupdmgr update >> $LOG_FILE 2>&1
echo "固件更新完成" >> $LOG_FILE
fi
else
echo "没有可用更新" >> $LOG_FILE
fi
注意事项
- 权限要求:大多数固件操作需要root/管理员权限
- 系统依赖性:不同硬件厂商提供不同的更新机制
- 安全性:确保固件更新来源可靠
- 备份:更新前建议备份重要数据
这些脚本可以根据具体需求进行调整和扩展,对于生产环境,建议先测试兼容性。