本文目录导读:

我来介绍几种获取硬件信息的脚本方法,涵盖不同操作系统和场景:
Linux 系统脚本
综合硬件信息脚本
#!/bin/bash # 获取Linux系统硬件信息 echo "=== CPU 信息 ===" lscpu | grep -E "Model name|CPU\(s\)|Architecture" echo -e "\n=== 内存信息 ===" free -h | awk 'NR==1 || NR==2' echo -e "\n=== 磁盘信息 ===" lsblk -o NAME,SIZE,TYPE,MOUNTPOINT echo -e "\n=== 图形/显卡信息 ===" lspci | grep -i vga echo -e "\n=== 网络接口 ===" ip -br addr show echo -e "\n=== USB设备 ===" lsusb
使用dmidecode(需root权限)
#!/bin/bash # 获取DMI/SMBIOS硬件信息 echo "=== 系统信息 ===" dmidecode -t system | grep -E "Manufacturer|Product Name" echo -e "\n=== 主板信息 ===" dmidecode -t baseboard | grep -E "Manufacturer|Product Name" echo -e "\n=== BIOS信息 ===" dmidecode -t bios | grep -E "Vendor|Version" echo -e "\n=== 内存条信息 ===" dmidecode -t memory | grep -E "Size|Speed|Manufacturer|Part Number"
Windows 系统脚本
PowerShell 脚本
# 获取Windows硬件信息
Write-Host "=== CPU 信息 ===" -ForegroundColor Green
Get-CimInstance Win32_Processor |
Select-Object Name, NumberOfCores, NumberOfLogicalProcessors
Write-Host "`n=== 内存信息 ===" -ForegroundColor Green
Get-CimInstance Win32_ComputerSystem |
Select-Object @{N='TotalMemoryGB';E={[math]::Round($_.TotalPhysicalMemory/1GB,2)}}
Get-CimInstance Win32_PhysicalMemory |
Select-Object Manufacturer, Capacity, Speed
Write-Host "`n=== 磁盘信息 ===" -ForegroundColor Green
Get-PhysicalDisk |
Select-Object FriendlyName, MediaType, Size
Write-Host "`n=== 显卡信息 ===" -ForegroundColor Green
Get-CimInstance Win32_VideoController |
Select-Object Name, AdapterRAM, DriverVersion
Write-Host "`n=== 网络适配器 ===" -ForegroundColor Green
Get-NetAdapter | Where-Object Status -eq 'Up' |
Select-Object Name, InterfaceDescription, MacAddress
Write-Host "`n=== 电池信息 ===" -ForegroundColor Green
Get-CimInstance Win32_Battery |
Select-Object EstimatedChargeRemaining, BatteryStatus
使用WMIC(传统方法)
@echo off echo === CPU信息 === wmic cpu get name,numberofcores echo. echo === 内存信息 === wmic memorychip get manufacturer,capacity,speed echo. echo === 磁盘信息 === wmic diskdrive get model,size,mediatype echo. echo === 显卡信息 === wmic path win32_videocontroller get name,driverversion echo. echo === 主板信息 === wmic baseboard get manufacturer,product
跨平台 Python 脚本
使用platform模块
#!/usr/bin/env python3
import platform
import socket
import subprocess
import json
def get_system_info():
info = {}
# 基础系统信息
info['system'] = platform.system()
info['version'] = platform.version()
info['machine'] = platform.machine()
info['processor'] = platform.processor()
info['hostname'] = socket.gethostname()
return info
def get_linux_info():
"""Linux特定信息"""
import os
info = {}
# CPU信息
with open('/proc/cpuinfo') as f:
cpuinfo = f.read()
# 内存信息
with open('/proc/meminfo') as f:
meminfo = f.read().split('\n')
for line in meminfo:
if line.startswith('MemTotal'):
info['total_memory'] = line.split(':')[1].strip()
# 磁盘信息
try:
result = subprocess.check_output(['df', '-h']).decode()
info['disk'] = result
except:
pass
return info
if __name__ == "__main__":
system_info = get_system_info()
print("=== 系统信息 ===")
for key, value in system_info.items():
print(f"{key}: {value}")
if platform.system() == "Linux":
print("\n=== Linux硬件信息 ===")
linux_info = get_linux_info()
for key, value in linux_info.items():
print(f"{key}: {value}")
高级 Python 脚本(使用第三方库)
#!/usr/bin/env python3
"""使用psutil库获取硬件信息"""
import psutil
import platform
import datetime
def get_hardware_info():
info = {}
# CPU信息
info['cpu'] = {
'physical_cores': psutil.cpu_count(logical=False),
'logical_cores': psutil.cpu_count(logical=True),
'max_frequency': psutil.cpu_freq().max,
'current_frequency': psutil.cpu_freq().current,
'usage_percent': psutil.cpu_percent(interval=1)
}
# 内存信息
mem = psutil.virtual_memory()
info['memory'] = {
'total': mem.total / (1024**3), # GB
'available': mem.available / (1024**3),
'used_percent': mem.percent
}
# 磁盘信息
info['disk'] = []
for partition in psutil.disk_partitions():
try:
usage = psutil.disk_usage(partition.mountpoint)
info['disk'].append({
'device': partition.device,
'mountpoint': partition.mountpoint,
'total_gb': usage.total / (1024**3),
'used_percent': usage.percent
})
except:
pass
# 网络信息
net = psutil.net_if_addrs()
info['network'] = []
for interface, addrs in net.items():
for addr in addrs:
if addr.family == 2: # IPv4
info['network'].append({
'interface': interface,
'ip': addr.address,
'netmask': addr.netmask
})
return info
if __name__ == "__main__":
import json
hardware_info = get_hardware_info()
print(json.dumps(hardware_info, indent=2))
网络发现脚本
#!/bin/bash
# 跨平台网络硬件发现
get_mac_address() {
# Linux
if [ "$(uname)" == "Linux" ]; then
ip link show | grep ether | awk '{print $2}'
# macOS
elif [ "$(uname)" == "Darwin" ]; then
ifconfig | grep ether | awk '{print $2}'
# Windows Git Bash
else
ipconfig //all | grep "物理地址" | awk -F ': ' '{print $2}'
fi
}
echo "本机MAC地址:"
get_mac_address
echo -e "\n系统架构:"
uname -m 2>/dev/null || echo "Unknown"
使用建议
-
选择原则:
- Linux 服务器:使用 shell/bash 脚本
- Windows 管理:使用 PowerShell
- 跨平台应用:使用 Python
- 快速诊断:使用命令行工具
-
安装依赖:
# Python psutil pip install psutil
-
权限注意:
- 某些命令需要 root/管理员权限
- dmidecode 需要 root 权限
-
输出格式化:
- 建议将输出保存为 JSON 格式便于程序处理
- 可以添加时间戳和日志功能
根据你的具体需求选择合适的方法,如果需要更详细的信息,我可以针对特定硬件或场景进行补充。