
pip install psutil wmi
from os import systemimport platformimport subprocessfrom datetime import datetimeimport sysimport psutilimport wmi # 仅限 Windowsdef get_system_info():#获取系统信息system_info = {"操作系统": platform.system(),"版本号": platform.version(),"架构": platform.architecture()[0],"处理器": platform.processor(),"系统名称": platform.node()}return system_infodef get_cpu_info():#获取 CPU 信息cpu_info = []if platform.system() == 'Windows':c = wmi.WMI()for cpu in c.Win32_Processor():cpu_info.append({"型号": cpu.Name.strip(),"制造商": cpu.Manufacturer,"核心数": cpu.NumberOfCores,"线程数": cpu.NumberOfLogicalProcessors,"最大频率(GHz)": round(float(cpu.MaxClockSpeed) / 1000, 2)})else:cmd = "lscpu" if platform.system() == 'Linux' else "sysctl -n machdep.cpu.brand_string"model = subprocess.check_output(cmd, shell=True).decode().strip()cpu_info.append({"型号": model,"制造商": "Unknown","核心数": psutil.cpu_count(logical=False),"线程数": psutil.cpu_count(logical=True),"最大频率(GHz)": round(psutil.cpu_freq().max / 1000, 2) if psutil.cpu_freq() else 'N/A'})return cpu_infodef get_memory_info():#获取内存信息mem_info = []if platform.system() == 'Windows':c = wmi.WMI()for mem in c.Win32_PhysicalMemory():mem_info.append({"容量(GB)": round(int(mem.Capacity) / (1024**3), 2),"类型": _get_mem_type(mem.SMBIOSMemoryType),"频率(MHz)": mem.ConfiguredClockSpeed or 'N/A',"厂商": mem.Manufacturer or 'Unknown'})else:total = psutil.virtual_memory().totalmem_info.append({"容量(GB)": round(total / (1024**3), 2),"类型": "Unknown","频率(MHz)": "N/A","厂商": "Unknown"})return mem_infodef _get_mem_type(mem_type):#转换内存类型代码为文字types = {20: "DDR", 21: "DDR2", 24: "DDR3",26: "DDR4", 30: "DDR5"}return types.get(mem_type, "Unknown")def get_disk_info():#获取磁盘信息disks = []for part in psutil.disk_partitions():if 'cdrom' in part.opts or part.fstype == '':continueusage = psutil.disk_usage(part.mountpoint)disks.append({"设备": part.device,"挂载点": part.mountpoint,"文件系统": part.fstype,"总容量(GB)": round(usage.total / (1024**3), 2)})return disksdef get_gpu_info():"""获取显卡信息(仅限Windows)"""if platform.system() == 'Windows':c = wmi.WMI()return [{"型号": gpu.Name,"显存(GB)": round(int(gpu.AdapterRAM) / (1024**3), 2)} for gpu in c.Win32_VideoController()]return []def get_network_info():"""获取网络适配器信息"""if platform.system() == 'Windows':c = wmi.WMI()return [{"名称": nic.Description,"IP地址": nic.IPAddress[0] if nic.IPAddress else 'N/A',"MAC地址": nic.MACAddress} for nic in c.Win32_NetworkAdapterConfiguration(IPEnabled=True)]# 其他操作系统else:return [{"名称": interface.name,"IP地址": interface.address,"MAC地址": interface.address} for interface in psutil.net_if_addrs().values()]def generate_markdown(data):#生成 Markdown 报告#md = '# 系统硬件检测报告\n'md += '生成时间: '+datetime.now().strftime("%Y-%m-%d %H:%M:%S")+'\n'## 系统信息# 系统信息表md += "\n## 系统信息\n"md += _create_table([data['system']])# CPU 信息表md += "\n## CPU 信息\n"md += _create_table(data['cpu'])# 内存信息表md += "\n## 内存信息\n"md += _create_table(data['memory'])# 磁盘信息表md += "\n## 存储信息\n"md += _create_table(data['disks'])# 显卡信息表md += "\n## 显卡信息\n"md += _create_table(data['gpu'])# 网络适配器信息表md += "\n## 网络适配器信息\n"md += _create_table(data['network'])return mddef _create_table(data):# 生成 Markdown 表格if not data:return "无数据\n"headers = list(data[0].keys())table = "| " + " | ".join(headers) + " |\n"table += "| " + " | ".join(["---"] * len(headers)) + " |\n"for row in data:values = [str(row.get(h, 'N/A')) for h in headers]table += "| " + " | ".join(values) + " |\n"return tableif __name__ == "__main__":hardware_data = {"system": get_system_info(),"cpu": get_cpu_info(),"memory": get_memory_info(),"disks": get_disk_info(),"gpu": get_gpu_info(),"network": get_network_info()}report = generate_markdown(hardware_data)print(hardware_data)with open("HardwareReport.md", "w", encoding="utf-8") as f:f.write(report)print("硬件报告已生成: HardwareReport.md")
此版本解决了以下关键问题:
完全避免执行策略问题
自动处理空值和类型转换
支持主流操作系统
输出标准化 Markdown 格式
不依赖管理员权限(基础功能)
文章转载自老柴杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




