python 获取硬件信息_python获取windows的硬件信息

#-*- coding: UTF-8 -*-

'''=================================================

@Project -> File :CMDB -> collect_windows_info.py

@IDE :PyCharm

@Author :XuMou

@Date :2020/7/30 12:57

=================================================='''

importplatformimportwin32comimportwmi"""本模块基于windows操作系统,依赖wmi和win32com库,需要提前使用pip进行安装,

pip install wmi

pip install pypiwin32

或者下载安装包手动安装。"""

classWin32Info(object):def __init__(self):#固定用法,更多内容请参考模块说明

self.wmi_obj =wmi.WMI()

self.wmi_service_obj= win32com.client.Dispatch("WbemScripting.SWbemLocator")

self.wmi_service_connector= self.wmi_service_obj.ConnectServer(".", "root\cimv2")defcollect(self):

data={'os_type': platform.system(),'os_release': "%s %s %s" %(platform.release(), platform.architecture()[0], platform.version()),'os_distribution': 'Microsoft','asset_type': 'server'}#分别获取各种硬件信息

data.update(self.get_cpu_info())

data.update(self.get_ram_info())

data.update(self.get_motherboard_info())

data.update(self.get_disk_info())

data.update(self.get_nic_info())#最后返回一个数据字典

returndatadefget_cpu_info(self):"""获取CPU的相关数据,这里只采集了三个数据,实际有更多,请自行选择需要的数据

:return:"""data={}

cpu_lists=self.wmi_obj.Win32_Processor()

cpu_core_count=0for cpu incpu_lists:

cpu_core_count+=cpu.NumberOfCores

cpu_model= cpu_lists[0].Name #CPU型号(所有的CPU型号都是一样的)

data["cpu_count"] = len(cpu_lists) #CPU个数

data["cpu_model"] =cpu_model

data["cpu_core_count"] = cpu_core_count #CPU总的核数

returndatadefget_ram_info(self):"""收集内存信息

:return:"""data=[]#这个模块用SQL语言获取数据

ram_collections = self.wmi_service_connector.ExecQuery("Select * from Win32_PhysicalMemory")for ram in ram_collections: #主机中存在很多根内存,要循环所有的内存数据

ram_size = int(int(ram.Capacity) / (1024**3)) #转换内存单位为GB

item_data ={"slot": ram.DeviceLocator.strip(),"capacity": ram_size,"model": ram.Caption,"manufacturer": ram.Manufacturer,"sn": ram. SerialNumber,

}

data.append(item_data)#将每条内存的信息,添加到一个列表里

return {"ram": data} #再对data列表封装一层,返回一个字典,方便上级方法的调用

defget_motherboard_info(self):"""获取主板信息

:return:"""computer_info=self.wmi_obj.Win32_ComputerSystem()[0]

system_info=self.wmi_obj.Win32_OperatingSystem()[0]

data={}

data['manufacturer'] =computer_info.Manufacturer

data['model'] =computer_info.Model

data['wake_up_type'] =computer_info.WakeUpType

data['sn'] =system_info.SerialNumberreturndatadefget_disk_info(self):"""硬盘信息

:return:"""data=[]for disk in self.wmi_obj.Win32_DiskDrive(): #每块硬盘都要获取相应信息

disk_data ={}

interface_choices= ["SAS", "SCSI", "SATA", "SSD"]for interface ininterface_choices:if interface indisk.Model:

disk_data['interface_type'] =interfacebreak

else:

disk_data['interface_type'] = 'unknown'disk_data['slot'] =disk.Index

disk_data['sn'] =disk.SerialNumber

disk_data['model'] =disk.Model

disk_data['manufacturer'] =disk.Manufacturer

disk_data['capacity'] = int(int(disk.Size) / (1024**3))

data.append(disk_data)return {'physical_disk_driver': data}defget_nic_info(self):"""网卡信息

:return:"""data=[]for nic inself.wmi_obj.Win32_NetworkAdapterConfiguration():if nic.MACAddress is notNone:

nic_data={}

nic_data['mac'] =nic.MACAddress

nic_data['model'] =nic.Caption

nic_data['name'] =nic.Indexif nic.IPAddress is notNone:

nic_data['ip_address'] =nic.IPAddress[0]

nic_data['net_mask'] =nic.IPSubnetelse:

nic_data['ip_address'] = ''nic_data['net_mask'] = ''data.append(nic_data)return {'nic': data}if __name__ == "__main__":#测试代码

data =Win32Info().collect()for key indata:print(key, ":", data[key])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值