通过查找相关资料,总结了一下python用WMI等获取windows系统信息以及修改系统的相关配置,代码如下(附件中有本代码附件):
#-*- coding:utf-8 -*-
import time
import datetime
import re
import subprocess
import sys
import wmi
import os
import ConfigParser
import _winreg
import win32net
import win32api
import win32con
import win32netcon
import win32security
#DEBUG=True
#DEBUG=False
#LOGFILE=r'c:win.log'
TIME_FORMAT=r'%Y-%m-%d %H:%M:%S'
#c=wmi.WMI(privileges=["Admin","Shutdown","Security"])
#实例化wmi类
c=wmi.WMI()
#定义myWmi类并返回实例化对象
class myWmi(object):
#定义构造器
def __init__(self,wmiclass,info={},name=""):
if name:
self.obj=wmiclass(Name=name)
else:
self.obj=wmiclass()
self.info=info
return self.obj
#定义myOs类用于系统信息查询及设置
class myOs(object):
#定义构造器
def __init__(self,wmiobj=c,info={}):
#创建wmi实例
self.obj=wmiobj.Win32_OperatingSystem()[0] #用于获取计算机运行环境信息
self.cobj=wmiobj.Win32_ComputerSystem()[0] #用于获取计算机CPU数量,内存大小,主板相关信息
self.disk_obj= wmiobj.Win32_DiskDrive() #用于获取硬盘相关信息
self.Partition_obj= wmiobj.Win32_LogicalDisk() #用于获取分区相关信息
self.networkAdapter_obj = wmiobj.Win32_NetworkAdapterConfiguration (IPEnabled=1) #用于配置及获取网络连接相关信息
self.process_obj = wmiobj.Win32_Processor()[0] #用于获取CPU详细信息
self.update_obj = wmiobj.Win32_QuickFixEngineering() #用于获取windows更新补丁相关信息
self.info=info #定义用于存放配置信息的字典
def get_os_info(self):
"""
返回系统相关信息
"""
self.info["os"]=self.obj.Caption #获取系统版本
self.info["version"]=self.obj.CSDVersion #操作系统更新版本
self.info["fullname"]=self.obj.CSName #获取计算机名
self.info["localtime"]=datetime.datetime.strptime(str(str(self.obj.LocalDateTime ).split('.')[0]),'%Y%m%d%H%M%S') #获取系统本地时间
self.info["lastboottime"]=datetime.datetime.strptime(str(str(self.obj.LastBootUpTime ).split('.')[0]),'%Y%m%d%H%M%S') #获取系统上次启动时间
self.info["os_architecture"]=self.obj.OSArchitecture #获取操作系统类型(32bit/64bit)
self.info["mu_languages"]=self.obj.MUILanguages[0] #获取操作系统语言版本
self.info["SerialNumber"]=self.obj.SerialNumber #获取操作系统序列号
self.info["cpu_count"]=self.cobj.NumberOfProcessors #获取cpu数量
self.info["mainboard"]=self.cobj.Manufacturer #获取主板厂商信息
self.info["board_model"]=self.cobj.Model #获取主板型号
self.info["systemtype"]=self.cobj.SystemType #获取主板架构类型
self.info["physical_memory"]=int(self.cobj.TotalPhysicalMemory)/1024/1024 #获取内存容量
self.info["cpu_name"] = self.process_obj.Name #获取cpu类型
self.info["clock_speed"] = self.process_obj.MaxClockSpeed #获取操作系统主频
self.info["number_core"] = self.process_obj.NumberOfCores #获取核心数量
self.info["data_width"] = self.process_obj.DataWidth #获取计算机的CPU数据宽度
self.info["socket_desigination"] = self.process_obj.SocketDesignation #获取主板cpu接口类型
self.info["l2_cache"] = self.process_obj.L2CacheSize #获取cpu二级缓存大小
self.info["l3_cache"] = self.process_obj.L3CacheSize #获取cpu三级缓存大小
return self.info
#打印补丁更新信息
def update_information(self):
output=open(log_path,"a+")
output.write('n')
output.write('[Update information]rn')
for s in self.update_obj:
output.write('%-10s %-10s %-20s %-10sn' %(s.HotFixID,s.InstalledOn,s.Description,s.InstalledBy))
output.write('n')
#打印磁盘信息
def get_diskinfo(self):
for item in self.disk_obj:
output=open(log_path,"a+")
output.write('n')
output.write('[disk info]rn')
for item in self.disk_obj:
output.write('%-25s Partition: %-3s SN: %-30s %-3sGn' %(item.Caption,str(item.Partitions),item.SerialNumber,str(int(item.Size)/1024/1024/1024)))
#output.write('%-30s Partition: %-5s SN: %-30s %-10s Gn' %(item.Caption,str(item.Partitions),item.SerialNumber,str((item.Size)/1024/1024/1024)))
output.write('n')
break
#打印磁盘分区信息
def get_partitioninfo(self):
Partition_count = len(self.Partition_obj)
output=open(log_path,"a+")
output.write('n')
output.write('[Partition info]rn')
output.write('rn')
for x in range(len(self.Partition_obj)):
if self.Partition_obj[x].DriveType == 3:
output.write('DeviceID = %-4s FileSystem = %-5s TotalSize = %-1sG FreeSpace = %-1sGn' %(self.Partition_obj[x].DeviceID,self.Partition_obj[x].FileSystem,str(int(self.Partition_obj[x].Size)/1024/1024/1024),str(int(self.Partition_obj[x].FreeSpace)/1024/1024/1024)))
output.write('n')
#打印网络配置信息
def get_networkadapter(self):
output=open(log_path,"a+")
output.write('n')
output.write('[network info]rn')
for interface in self.networkAdapter_obj:
output.write('IP Address: %-10sn' %interface.IPAddress[0])
output.write('NET Mask: %-10sn' %interface.IPSubnet[0])
output.write('Gateway: %-10sn' %interface.DefaultIPGateway)
output.write('Pri DNS: %-10sn' %str(interface.DNSServerSearchOrder[0]))
output.write('Sec DNS: %-10sn' %str(interface.DNSServerSearchOrder[1]))
output.write('Real Mac: %-10sn' %interface.MACAddress)
output.write('n')
break
#强制关机
def win32shutdown(self):
self.obj.Win32Shutdown()
#重启操作系统
def reboot(self):
self.obj.Reboot()
#关闭操作系统
def shutdown(self):
self.obj.Shutdown()
#定义network_config类用于网络设置信息查询及设置
class network_config(object):
#定义构造器
def __init__(self,wmiobj=c):
#实例化对象
self.obj = wmiobj.Win32_NetworkAdapterConfiguration
#设置LMHOSTS
def config_setup(self):
self.obj.EnableWINS(WINSEnableLMHostsLookup=False)
#设置dns
def tcp_config(self):
interfaces = c.Win32_NetworkAdapterConfiguration(IPEnabled=True)
device_count = len(interfaces)
start_num = 0
dns = ['202.106.196.115','202.106.0.20']
while True:
for first_if in interfaces:
dns_result = first_if.SetDNSServerSearchOrder(DNSServerSearchOrder = dns)
netbios_result = first_if.SetTcpipNetbios(TcpipNetbiosOptions = 2)
start_num += 1
if start_num > device_count:
break
return dns_result,netbios_result
#############################
# #
# Service #
# #
#############################
#定于myService()类用于系统服务检查及设置
class myService(object):
"""
control system service
"""
#定义构造器
def __init__(self,name="",wmiobj=c,**kargs):
self.name=name
kargs={}
args=""
if self.name:
self.obj=wmiobj.Win32_Service(Name=self.name)[0] #obj in the list
elif kargs:
for key in kargs:
args+=key+'='+'"'+kargs[key]+'"'+','
args=args[:-1]
cmd="wmiobj.Win32_Service("+args+")"
self.obj=eval(cmd)
else:
self.obj=wmiobj.Win32_Service()
def get_service_info(self):
service_list=[]
for ser in self.obj:
service_dict={}
service_dict["name"]=ser.Name
service_dict["displayname"]=ser.Caption
service_dict["pid"]=ser.ProcessID
service_dict["stat"]=ser.State
service_dict["startmode"]=ser.StartMode
service_list.append(service_dict)
return service_list
#获取系统服务状态
def status(self):
return self.obj.State
#启动服务
def start(self):
self.obj.StartService()
#停止服务
def stop(self):
self.obj.StopService()
#关闭黑名单中系统服务
def change_mode(self,mode):
blacklist_path = sys.path[0]+'/data/svr_blacklist.txt'
f=open(blacklist_path)
svr_blacklist = f.readlines()
f.close()
for b in svr_blacklist:
b = b.strip()
for s in self.obj:
if b in s.Name:
"""
Three mode available: Auto, Manual and Disabled
"""
s.ChangeStartMode(mode)
else:
continue
break
#obj.ChangeStartMode(mode)
#删除系统服务
def delete(self):
print "You should not delete a service, stop it instead."
#############################
# #
# Process #
# #
#############################
#定义myProcess类用于进程查看
class myProcess(myWmi):
def __init__(self,name=""):
self.name=name
myWmi.__init__(self,c.Win32_Process,name=self.name)
def get_process_info(self):
processlist=[]
for process in self.obj:
processlist.append((process.ProcessID,process.Name,process.CreationDate,process.ExecutablePath,process.Caption))
return processlist
def get_process_owner(self):
return self.obj[0].GetOwner()
def terminate(self):
self.obj[0].Terminate()
#############################
# #
# Software #
# #
#############################
#定义mySoft类用于安装软件检查
class mySoft(myWmi):
def __init__(self,name=""):
self.name=name
myWmi.__init__(self,c.Win32_Product,name=self.name)
def get_software(self):
softlist=[]
for soft in self.obj:
softlist.append((soft.Name,soft.InstallDate))
return softlist
def uninstall(self):
#self.obj[0].Uninstall()
pass
#############################
# #
# User and Group #
# #
#############################
'''
def dump(dict):
for key,value in dict.items():
print key,"=",str(value)'''
#定义myAccount类用于帐号检查及设置
class myAccount(myWmi):
#类构造器
def __init__(self,name="",group=""):
self.uname=name
self.gname=group
self.uobj=myWmi.__init__(self,c.Win32_UserAccount,name=self.uname)
self.guobj=myWmi.__init__(self,c.Win32_GroupUser,name=self.gname)
#返回账户列表
def show_user_list(self):
ulist=[]
for user in self.uobj:
ulist.append(user.Name)
return ulist
#返回禁用的账户列表
def show_user_info(self,username):
info=win32net.NetUserGetInfo(None,username,3)
info["disabled"]=user.Disabled #Disabled is true means the account is disabled.
info["status"]=user.Status
return ulist
#返回用户组
def show_user_in_group(self):
gulist={}
for gu in self.guobj:
if gu.GroupComponent.Name not in gulist:
gulist[gu.GroupComponent.Name]=[gu.PartComponent.Name]
else:
gulist[gu.GroupComponent.Name].append(gu.PartComponent.Name)
return gulist
#返回管理员用户列表
def show_userlist_admin(self):
uresume = 0
while True:
admin_list = []
users, total, uresume = win32net.NetLocalGroupGetMembers (None, 'Administrators', 0, uresume)
for sid in (u['sid'] for u in users):
username, domain, type = win32security.LookupAccountSid (None, sid)
admin_list.append(username)
return admin_list
if uresume == 0:
break
#获取当前用户
def get_current_user(self):
return win32api.GetUserName()
#删除用户
def delete_user(self,username):
win32net.NetUserDel(None,username)
#添加用户
def add_user(self,name,passwd,flags=win32netcon.UF_NORMAL_ACCOUNT|win32netcon.UF_SCRIPT,privileges=win32netcon.USER_PRIV_ADMIN):
udata={} #user info dict, can be gotten by win32net.NetUserGetInfo
udata["name"]=name
udata["password"]=passwd
udata["flags"]=flags
udata["priv"]=privileges
win32net.NetUserAdd(None, 1, udata)
#设置用户信息
def modify_user(self,username,udict,level=2):
win32net.NetUserSetInfo(None,username,level,udict)
#修改用户密码
def change_passwd(self,username,oldpass,newpass):
win32net.NetUserChangePassword(None,username,oldpass,newpass)
#重命名账户
def rename_user(self,oldname,newname):
for item in self.uobj:
if oldname in item.id:
item.Rename('admin')
else:
continue
#############################
# #
# Registry #
# #
#############################
#定义myRegistry类用于注册表项目检查及设置
class myRegistry(object):
"""
#print myRegistry().get_value(win32con.HKEY_LOCAL_MACHINE,r'SAMSAMDomainsAccountUsers','Names')
#myRegistry().add_key(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARETJTG')
#print myRegistry().list_keys(_winreg.HKEY_LOCAL_MACHINE,r'SAMSAMDomainsAccountUsersNames')
#myRegistry().add_value(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARETJTG','AtionName','TJ7PP')
#myRegistry().delete_value(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARETJTG','AtionName')
#myRegistry().delete_key(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARETJTG')
#print myRegistry().get_value(_winreg.HKEY_LOCAL_MACHINE,r'SOFTWARETracker Softwarepdfxctrl.PdfPrinterPreferences','XCL_PATH')
"""
#定义构造函数
def __init__(self):
#self.obj=wmi.Registry()
self.obj=wmi.WMI(namespace='DEFAULT').StdRegProv
#列出注册表项
def list_keys(self,root,subkey):
result,names=self.obj.EnumKey(hDefKey=root,sSubKeyName=subkey)
if result == 2:
print "No such keys"
return names
#返回对应注册表项键值
def get_value(self,root,subkey,valuename,type="string"):
if type == "string":
result,value = self.obj.GetExpandedStringValue(hDefKey=root,sSubKeyName=subkey,sValueName=valuename)
elif type == "dword":
result,value = self.obj.GetDWORDValue(hDefKey=root,sSubKeyName=subkey,sValueName=valuename)
else:
result,value = self.obj.GetBinaryValue(hDefKey=root,sSubKeyName=subkey,sValueName=valuename)
return value
#添加注册表项
def add_key(self,root,subkey):
return self.obj.CreateKey(hDefKey=root,sSubKeyName=subkey)
#old value can be overwritten
#设置键值
def set_value(self,root,subkey,valuename,value,type):
if type == "string":
value = self.obj.SetStringValue(hDefKey=root,sSubKeyName=subkey,sValueName=valuename,sValue=value)
else:
value = self.obj.SetDWORDValue(hDefKey=root,sSubKeyName=subkey,sValueName=valuename,uValue=value)
return value
#删除注册表项
def delete_key(self,root,subkey):
return self.obj.DeleteKey(root,subkey)
#删除键值
def delete_value(self,root,subkey,valuename):
return self.obj.DeleteValue(root,subkey,valuename)
#获取注册表中用户列表
def get_sys_sid():
reg_user_list = myRegistry().list_keys(_winreg.HKEY_LOCAL_MACHINE,r'SAMSAMDomainsAccountUsers')
sid_admin = u'000001F4'
reg_user_list.remove(sid_admin)
length =len(reg_user_list)
key_list = []
raw_pattern = re.compile(r'^00000')
n = 0
while True:
for m in reg_user_list:
if raw_pattern.match(m):
n += 1
if n < length:
key_list.append(m)
else:
break
break
return key_list
#检查克隆账户
def chk_clone_account():
a = get_sys_sid()
sid_value = myRegistry().get_value(_winreg.HKEY_LOCAL_MACHINE, r'SAMSAMDomainsAccountUsers
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1512/viewspace-2820324/ ,如需转载,请注明出处,否则将追究法律责任。