yzqzs 发表于 2018-6-10 11:59:55

python用WMI等获取及修改windows系统信息

  通过查找相关资料,总结了一下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()                                          #用于获取计算机运行环境信息
      self.cobj=wmiobj.Win32_ComputerSystem()                                          #用于获取计算机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()                                    #用于获取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('.')),'%Y%m%d%H%M%S')      #获取系统本地时间
      self.info["lastboottime"]=datetime.datetime.strptime(str(str(self.obj.LastBootUpTime ).split('.')),'%Y%m%d%H%M%S')    #获取系统上次启动时间
      self.info["os_architecture"]=self.obj.OSArchitecture                                                                     #获取操作系统类型(32bit/64bit)
      self.info["mu_languages"]=self.obj.MUILanguages                                                                     #获取操作系统语言版本
      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('\r\n')
      for s in self.update_obj:
            output.write('%-10s %-10s %-20s %-10s\n' %(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('\r\n')
            for item in self.disk_obj:
                output.write('%-25s Partition: %-3s SN: %-30s %-3sG\n' %(item.Caption,str(item.Partitions),item.SerialNumber,str(int(item.Size)/1024/1024/1024)))
                #output.write('%-30s Partition: %-5s SN: %-30s %-10s G\n' %(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('\r\n')
      output.write('\r\n')
      for x in range(len(self.Partition_obj)):
                if self.Partition_obj.DriveType == 3:
                  output.write('DeviceID = %-4s FileSystem = %-5s TotalSize = %-1sG    FreeSpace = %-1sG\n' %(self.Partition_obj.DeviceID,self.Partition_obj.FileSystem,str(int(self.Partition_obj.Size)/1024/1024/1024),str(int(self.Partition_obj.FreeSpace)/1024/1024/1024)))
                  output.write('\n')
  #打印网络配置信息
    def get_networkadapter(self):
      output=open(log_path,"a+")
      output.write('\n')
      output.write('\r\n')
      for interface in self.networkAdapter_obj:
            output.write('IP Address:%-10s\n' %interface.IPAddress)
            output.write('NET Mask:    %-10s\n' %interface.IPSubnet)
            output.write('Gateway:   %-10s\n' %interface.DefaultIPGateway)
            output.write('Pri DNS:   %-10s\n' %str(interface.DNSServerSearchOrder))
            output.write('Sec DNS:   %-10s\n' %str(interface.DNSServerSearchOrder))
            output.write('Real Mac:    %-10s\n' %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)    #obj in the list
      elif kargs:
            for key in kargs:
                args+=key+'='+'"'+kargs+'"'+','
            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+'/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:
                ifb 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.GetOwner()
  def terminate(self):
      self.obj.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.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=
            else:
                gulist.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'SAM\SAM\Domains\Account\Users','Names')
    #myRegistry().add_key(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARE\TJTG')
    #print myRegistry().list_keys(_winreg.HKEY_LOCAL_MACHINE,r'SAM\SAM\Domains\Account\Users\Names')
    #myRegistry().add_value(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARE\TJTG','AtionName','TJ7PP')
    #myRegistry().delete_value(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARE\TJTG','AtionName')
    #myRegistry().delete_key(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARE\TJTG')
    #print myRegistry().get_value(_winreg.HKEY_LOCAL_MACHINE,r'SOFTWARE\Tracker Software\pdfxctrl.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'SAM\SAM\Domains\Account\Users')
    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'SAM\SAM\Domains\Account\Users\000001F4', r'F','')
    #print sid_value
    #检查SID值是否为管理员SID值
    for each_value in a:
      path = 'SAM\SAM\Domains\Account\Users\\'+ each_value
      key_value = myRegistry().get_value(_winreg.HKEY_LOCAL_MACHINE,path, r'F','')
      if sid_value == key_value:
            #print 'Clone Account SID is %s' %each_value
            return True
      else:
            continue
    #检查注册表项中是否有隐藏帐号
    reg_user_list=myRegistry().list_keys(_winreg.HKEY_LOCAL_MACHINE,r'SAM\SAM\Domains\Account\Users\Names')
  ulist = myAccount().show_user_list()
    for user in reg_user_list:
      if user not in ulist:
            #print 'Clone Account is %s' %user
            return True
  #############################
#                           #
#      Win_Base_setup   #
#                           #
#############################
#定义win_Base类用于系统基本配置
class win_Base():
    #实例化
    def __init__(self):
  #?????ᄅW??????
      self.cf=ConfigParser.ConfigParser()
      self.cf.read(sys.path+'/data/win_reg.ini')
  #根据win_reg.ini中读取到的配置选项,修改对应注册表项及对应键值
    def win_setup(self):
  #???????ᄅW??
      section_start = 0
      section_count = len(self.cf.sections())
      section_item = self.cf.sections()
      for user in section_item:
            while True:
                for user in section_item:
  #?????ᄅW???ᄅW??????????
                  name = self.cf.get(user,&quot;root&quot;)
                  subkey = self.cf.get(user,&quot;sub_key&quot;)
                  valuename = self.cf.get(user,&quot;value_name&quot;)
                  regtype = self.cf.get(user,&quot;reg_type&quot;)
                  #???????ᄀ↑????
                  if name == 'HKEY_LOCAL_MACHINE':
                        a = _winreg.HKEY_LOCAL_MACHINE
                  elif name == 'HKEY_CLASSES_ROOT':
                        a = _winreg.HKEY_CLASSES_ROOT
                  elif name == 'HKEY_CURRENT_USER':
                            a = _winreg.HKEY_CURRENT_USER
                  else:
                        return name
                  #??????????
                  if regtype == &quot;dword&quot;:
                        value = int(self.cf.get(user,&quot;value&quot;))
                  else:
                        value = self.cf.get(user,&quot;value&quot;)
                  #???????ᄀ↑????
  myRegistry().add_key(a,subkey)
  myRegistry().set_value(a,subkey,valuename,value,regtype)
  section_start += 1
                  if section_start == section_count:
                        break
  #############################
#                           #
#   Startup               #
#                           #
#############################
  #定义show_startupcommand类用于系统启动项目检查
def show_startupcommand():
    startup_list=[]
    obj=c.Win32_StartupCommand()
    for s in obj:
      startup_info = {}
      startup_info['Name'] = s.Name
      startup_info['Command'] = s.Command
      #startup_info['Location'] = s.Location
      #startup_info['User'] = s.User
      startup_list.append(startup_info)
      #if s.Command not in startup_list:
      #    start_value = s.Command + ' ' + s.Location
      #    startup_list.append((start_value))
    return startup_list
    '''startup_list=[]
    obj=c.Win32_StartupCommand()
    for s in obj:
      if s.Command not in startup_list:
            start_value = s.Command + ' ' + s.Location
            startup_list.append((start_value))
    return startup_list'''
  #############################
#                           #
#   Audit Log               #
#                           #
#############################
def reg(string):
    &quot;&quot;&quot;
instance of Win32_NTLogEvent
{
    Category = 9;
    CategoryString = &quot;Account Logon&quot;;
    ComputerName = &quot;MICROSOF-5524EC&quot;;
    EventCode = 680;
    EventIdentifier = 680;
    EventType = 5;
    InsertionStrings = {&quot;MICROSOFT_AUTHENTICATION_PACKAGE_V1_0&quot;, &quot;joe&quot;, &quot;MICROSOF-5524EC&quot;, &quot;0xC000006A&quot;};
    Logfile = &quot;Security&quot;;
    Message = &quot;Logon attempt by: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
\n
\nLogon account:joe
\n
\nSource Workstation: MICROSOF-5524EC
\n
\nError Code: 0xC000006A
\n
\n&quot;;
    RecordNumber = 16267;
    SourceName = &quot;Security&quot;;
    TimeGenerated = &quot;20100424000915.000000+480&quot;;
    TimeWritten = &quot;20100424000915.000000+480&quot;;
    Type = &quot;audit failure&quot;;
    User = &quot;NT AUTHORITY\\SYSTEM&quot;;
};
  instance of Win32_NTLogEvent
{
    Category = 2;
    CategoryString = &quot;Logon/Logoff&quot;;
    ComputerName = &quot;MICROSOF-5524EC&quot;;
    EventCode = 529;
    EventIdentifier = 529;
    EventType = 5;
    InsertionStrings = {&quot;joe&quot;, &quot;MICROSOF-5524EC&quot;, &quot;2&quot;, &quot;Advapi&quot;, &quot;Negotiate&quot;, &quot;MICROSOF-5524EC&quot;};
    Logfile = &quot;Security&quot;;
    Message = &quot;Logon Failure:
\n
\n\tReason:\t\tUnknown user name or bad password
\n
\n\tUser Name:\tjoe
\n
\n\tDomain:\t\tMICROSOF-5524EC
\n
\n\tLogon Type:\t2
\n
\n\tLogon Process:\tAdvapi
\n
\n\tAuthentication Package:\tNegotiate
\n
\n\tWorkstation Name:\tMICROSOF-5524EC
\n&quot;;
    RecordNumber = 16251;
    SourceName = &quot;Security&quot;;
    TimeGenerated = &quot;20100423091037.000000+480&quot;;
    TimeWritten = &quot;20100423091037.000000+480&quot;;
    Type = &quot;audit failure&quot;;
    User = &quot;NT AUTHORITY\\SYSTEM&quot;;
};
  regex=re.compile(r'(User Name|Logon account):\s*\w*')
    r=re.search(regex,string)
    if r:
      return r.group()
    else:
      return 0
  class myAuditLog():
    def __init__(self):
      cc=wmi.WMI(privileges=[&quot;Security&quot;])
      self.obj=cc.Win32_NTLogEvent()
  #type'll be success or failure.
    def get_history(self,type):
      log_type={'success':4,'failure':5}
      s_log=[]
      for s in self.obj:
            if s.EventType == log_type:
                m=reg(s.Message)
                if m:
                  s_log.append(s.CategoryString+', '+reg(s.Message)+', '+s.TimeWritten+', '+s.Type)
      return s_log&quot;&quot;&quot;
  #############################
#                           #
#      Share            #
#                           #
#############################
#定义myShare类用于共享检查及设置
class myShare(myWmi):
    def __init__(self,name=&quot;&quot;):
      myWmi.__init__(self,c.Win32_Share)
  def show_share(self):
      share_list=[]
  for s in self.obj:
            item_str = s.Name + ' ' +s.Path
            share_list.append(item_str)
            #print s.Name,'\t',s.Path
      return share_list
  
    def delete(self):
      for s in self.obj:
            s.Delete()
  &quot;&quot;&quot;def mycmd(cmd):
    try:
      p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
      (stdoutput,erroutput)=p.communicate()
    except OSError:
      print &quot;command %s wrong, check the command please!&quot; % cmd
    return (stdoutput,erroutput)&quot;&quot;&quot;
  def log(log_file,log_string,description):
    try:
  f=open(log_file,'a+')
      #f.write(time.strftime(TIME_FORMAT))
      f.write(description + '\n')
      f.write(str(log_string))
      f.write('\n\n')
      #f.write(time.strftime(TIME_FORMAT)+' '+log_string+'\n')
      f.close()
    except IOError,e:
      print e
      #print &quot;Can't open log file %s.&quot; % log_file
      sys.exit()
  def log_server(log_file,log_string):
    try:
      f=open(log_file,'a+')
      f.write(str(log_string))
      f.close()
    except IOError,e:
      print e
      #print &quot;Can't open log file %s.&quot; % log_file
      sys.exit()
  if __name__=='__main__':
  #log_path = sys.path+'/data/win.log'
    log_path = r'c:\win.log'
  #网络配置
    network_config().config_setup()
    network_config().tcp_config()
  #系统服务设置
    myService().change_mode('disabled')
  #基础配置
    win_Base().win_setup()
  #重命名管理员账户
    t = myAccount()
    if 'Administrator' in t.show_userlist_admin():
      t.rename_user('administrator','admin')
    elif 'admin' in t.show_userlist_admin():
      print 'user_admin has been chanaged!'
    else:
      print t.show_userlist_admin()
  print 'Windows base setup has finished!!'
  #帐号列表
    t =myAccount().show_user_list()
    output=open(log_path,&quot;a+&quot;)
    output.write('\n')
    for user in t:
      output.write('Windows Account is %s\n' %user)
    output.write('\n')
  #系统服务
    t = myService().get_service_info()
  '''item_count= len(t)
    n = 0
    log_server(log_path,'\n')
  while True:
      for item in t:
            item_value = '<' +str(item['pid'])+ '> <' + item['stat']+ '> <' + item['displayname']+ '><' + item['name'] + '> <' + item['startmode']+ '>'+'\n'
            log_server(log_path,item_value)
            n += 1
            if n > item_count:
                break
      break
    log_server(log_path,'\n')'''
  output=open(log_path,&quot;a+&quot;)
    output.write('\n')
    output.write('\n')
    for item in t:
      output.write('%-35s %-60s %-5s %-8s %-10s \n' %(item['name'],item['displayname'],item['pid'],item['stat'],item['startmode']))
    output.write('\n')
  #系统启动项列表
    t = show_startupcommand()
    output=open(log_path,&quot;a+&quot;)
    output.write('\n')
    output.write('\n')
    for item in t:
#      output.write('%-18s %-20s %-s \n' %(item['Name'],item['Command'],item['Location']))
      output.write('%-20s %-s \n' %(item['Name'],item['Command']))
    output.write('\n')
    '''n = 0
    item_count = len(t)
    log_server(log_path,'\n')
    while True:
      for item in t:
            item_value = '<' + item +'>' + '\n'
            log_server(log_path,item_value)
            n += 1
            if n > item_count:
                break
      break
    log_server(log_path,'\n')'''
  #共享模块
    t = myShare().show_share()
  output=open(log_path,&quot;a+&quot;)
    output.write('\n')
    for user in t:
      output.write('Share item is %s\n' %user)
    output.write('\n')
  #系统信息检查
  t = myOs().get_os_info()
    output=open(log_path,&quot;a+&quot;)
    output.write('\n')
    output.write('\n')
    for m in t.keys():
      output.write(&quot;%-20s: %-s\n&quot; %(m,t))
    output.write('\n')
  '''
    log_server(log_path,'\n')
    item_value = '<' + str(t['fullname'])+ '> <' + str(t['version'])+ '> <'+ str(t['lastboottime']) + '>' + '\n'
    log_server(log_path,item_value)
    log_server(log_path,'\n')'''
  #Windows 更新补丁检查
    myOs().update_information()
    #/*********Windows安全检查***************/
    #克隆帐号检查
    t = chk_clone_account()
    if chk_clone_account():
      Item_value = 'Account has been clone!\n'
      log_server(log_path,'\n')
      log_server(log_path,Item_value)
      log_server(log_path,'\n')
    else:
      Item_value = 'Account has not clone!\n'
      log_server(log_path,'\n')
      log_server(log_path,Item_value)
      log_server(log_path,'\n')
  #系统服务设置
    output=open(log_path,&quot;a+&quot;)
    toclose=[]
    blacklist_path = sys.path+'/data/svr_blacklist.txt'
    f=open(blacklist_path)
    svr_blacklist = f.readlines()
    f.close()
    s=myService()
    svr_stat=s.get_service_info()
    #print svr_blacklist
    #print svr_stat
    for b in svr_blacklist:
      b=b.strip()
      for svr in svr_stat:
      if svr[&quot;name&quot;] == b and svr[&quot;startmode&quot;] != &quot;Disabled&quot;:
          toclose.append(b)
    #output.write('*'*50+'\r\n')
  output.write('\r\n')
    #output.write('*'*50+'\r\n')
    for s in toclose:
      output.write(&quot;%s should be disabled\r\n&quot; % s)
  #磁盘信息
    myOs().get_diskinfo()
  #磁盘分区信息
    myOs().get_partitioninfo()
  #网卡信息
    myOs().get_networkadapter()
  #系统进程列表
  t = myProcess().get_process_info()
    output=open(log_path,&quot;a+&quot;)
    output.write('\n')
    output.write('\r\n')
    for x in t:
      if x != None:
            output.write('%-22s %-5s %-20s %-s\n' %(x,x,datetime.datetime.strptime(str(str(x).split('.')),'%Y%m%d%H%M%S'),x))
    output.write('\n')
  #系统服务设置
  #toclose=[]
    blacklist_path = sys.path+'/data/svr_blacklist.txt'
    f=open(blacklist_path)
    svr_blacklist = f.readlines()
    f.close()
    for b in svr_blacklist:
      b = b.strip()
      myService().change_mode(b,'Disabled')
    print 'Windows check has finished!!'
    sys.exit
页: [1]
查看完整版本: python用WMI等获取及修改windows系统信息