您的位置:首页 > 编程语言 > Python开发

PYTHON调用WIM对象获取WINDOWS系统的相关信息并打印到EXCEL

2018-02-05 09:54 603 查看
本人原创

前提:相关的网络端口须得开放方能正常调用


# -*- coding: utf-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import time
import wmi
import xlsxwriter #写EXCEL用到

def get_cmp_info(host,uname,pwd):
tmplist = {}
try:
# c = wmi.WMI(computer="localhost")
c = wmi.WMI(computer=host,user=uname,password=pwd)

tmplist["cmptype"] = gettype(c)
tmplist["ip"]=host
tmplist["factory"] = getfactory(c)
tmplist["cpus"]=getcpus(c)
tmplist["cpuname"]=getcpuname(c)
disks=[]
disks=getdisks(c)
tmplist["alldisk"]=str(disks[0])+"G"
tmplist["usedisk"]=str(disks[1])+"G"
tmplist["diskp"]=str(disks[2])+"%"
mem=[]
mem=getmemory(c)
tmplist["memory"]=mem[0]
tmplist["pmem"]=mem[1]
tmplist["hostnames"]=getcmpname(c)
tmplist["domains"]=getdomain(c)
tmplist["os"]=getsystemname(c)
tmplist["86or64"]=getx86or64(c)
cpuuse=[]
cpuuse=getcpuuse(c)
tmplist["cpunum"]=cpuuse[0]
tmplist["cpuuse"]=cpuuse[1]
tmplist["sn"]=getsn(c)
return tmplist

except Exception:
tmplist["cmptype"] = "None"
tmplist["ip"]="None"
tmplist["factory"] = "None"
tmplist["cpus"]="None"
tmplist["cpuname"]="None"
tmplist["alldisk"]="None"
tmplist["usedisk"]="None"
tmplist["diskp"]="None"
tmplist["memory"]="None"
tmplist["pmem"]="None"
tmplist["hostnames"]="None"
tmplist["domains"]="None"
tmplist["os"]="None"
tmplist["86or64"]="None"
tmplist["cpunum"]="None"
tmplist["cpuuse"]="None"
tmplist["sn"]="None"

return tmplist

def gettype(c):
try:
for cmptype in c.win32_computersystemproduct():
return cmptype.name
except Exception:
return "None"

def getsystemname(c):
try:
for sys in c.Win32_OperatingSystem():
a=str(sys.Caption.encode("UTF-8"))
return a

except Exception:
return "None"

def getx86or64(c):
try:
#for sys in c.Win32_OperatingSystem():
for sys in c.win32_processor():
#return str(sys.OSArchitecture.encode("UTF"))
<
4000
span style="color:#cc7832;">return str(sys.addresswidth)
except Exception:
return "None"

def getfactory(c):
try:
for factorys in c.win32_baseboard():
return factorys.Manufacturer
except Exception:
return "None"

def getsn(c):
try:
for bios_id in c.Win32_BIOS():
return bios_id.SerialNumber.strip()
except Exception:
return "None"

def getcpuuse(c):
cu=0
cn=0
try:
for cpu in c.Win32_Processor():
cl=int(cpu.LoadPercentage)
cu=cl+cu
cn=cn+1
l1=[]
l1.append(str(cn))

cp=str(int(cu/cn))+"%"
l1.append(cp)
return l1
except Exception:
l1=[]
l1.append("0")
l1.append("0")
return l1

def getmemory(c):
memall=0
try:
for Memory in c.Win32_PhysicalMemory():
memall=int(int(Memory.Capacity)+memall)
os = c.Win32_OperatingSystem()
umem=int(int(os[0].FreePhysicalMemory)/1024/10.24)
memall=int(memall/1024/1024/1024)
memp = str(100-int(int(umem)/int(memall))) + "%"
l1=[]
l1.append(str(memall)+"G")
l1.append(memp)
return l1

except Exception:
l1=[]
l1.append("0")
l1.append("0")
return l1

def getcpus(c):
cpunum=0
try:
for cpus in c.Win32_Processor():
cores=cpus.NumberOfCores
cpunum=cores+cpunum
return cpunum
except Exception:
return "None"

def getcpuname(c):

try:
for cpus in c.Win32_Processor():
return cpus.Name

except Exception:
return "None"

def getcmpname(c):
try:
for cmpname in c.win32_computersystem():
return cmpname.Name
except Exception:
return "None"

def getdomain(c):
try:
for cmpname in c.win32_computersystem():
return cmpname.Domain
except Exception:
return "None"

def getdisks(c):
alldisk=0
usedisk=0
try:
for physical_disk in c.Win32_DiskDrive():
for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"):
for logical_disk in partition.associators("Win32_LogicalDiskToPartition"):
a1=int(logical_disk.Size)/1024/1024/1024
u1=(int(logical_disk.Size)-int(logical_disk.FreeSpace))/1024/1024/1024
alldisk=alldisk+a1
usedisk=usedisk+u1
p=int(int(usedisk)*100/int(alldisk))
l1=[]
l1.append(alldisk)
l1.append(usedisk)
l1.append(p)
return l1

except Exception:
l1=[]
l1.append("0")
l1.append("0")
l1.append("0")
return l1

# get_cmp_info("1","2","3")
# c = wmi.WMI(computer="localhost")
# getmemory(c)

def trywex():
workbook1 = xlsxwriter.Workbook("c:\computers.xlsx")
worksheet = workbook1.add_worksheet()
title=[u'IP地址',u'主机名',u'域名',u'制造商',u'型号',u'CPU',u'CPU个数',u'CPU核心数',u'CPU使用率',u'内存G',u'内存使用率'\
,u'硬盘容量G',u'硬盘使用量',u'硬盘使用百分比',u'操作系统',u'X8664',u'序列号']

#CPU的个数,和CPU核心数这两样数据和操作系统的类型有关,经常不是很准,不建议采纳
format=workbook1.add_format()
worksheet.set_column(0,15,20)
format.set_bold()
worksheet.write_row('A1',title,format)
row=1
col=1
myfile=open('c:\pwd.txt','r')

#这样不太安全,最好加采取对字密码字段加密并存放于数据库中,从数据库中读出来以后再解密

for line in myfile:
con=line.split()
h=con[0].strip()
u=con[1].strip()
p=con[2].strip()
a={}
# worksheet.write(row,0,h)
a=get_cmp_info(h,u,p)
worksheet.write(row,0,a["ip"])
worksheet.write(row,col,a["hostnames"])
worksheet.write(row,col+1,a["domains"])
worksheet.write(row,col+2,a["factory"])
worksheet.write(row,col+3,a["cmptype"])
worksheet.write(row,col+4,a["cpuname"])
worksheet.write(row,col+5,a["cpunum"])
worksheet.write(row,col+6,a["cpus"])
worksheet.write(row,col+7,a["cpuuse"])
worksheet.write(row,col+8,a["memory"])
worksheet.write(row,col+9,a["pmem"])
worksheet.write(row,col+10,a["alldisk"])
worksheet.write(row,col+11,a["usedisk"])
worksheet.write(row,col+12,a["diskp"])
# print a["os"]
worksheet.write(row,col+13,a["os"])
worksheet.write(row,col+14,a["86or64"])
worksheet.write(row,col+15,a["sn"])

row=row+1
workbook1.close()
if __name__=="__main__":
trywex()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: