1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
   |  
# -*- coding:utf-8 -*-
 
from threading import Thread, Lock
from time import sleep, ctime
import Queue, time, random, pythoncom, wmi, os, re, win32com.client
 
maxthreads =  20 # maximum number of concurrent threads
loops = []
 
 
class Worker(Thread):
    def __init__(self, q):
        Thread.__init__(self)
        self.q  = q
 
    def run(self):
        all_done = 0
        log = open('C:\\uptime.csv', 'a')
        def WMIDateStringToDate(dtmDate):
            strDateTime = ""
            if (dtmDate[4] == 0):
                strDateTime = dtmDate[5] + '/'
            else:	
                strDateTime = dtmDate[4] + dtmDate[5] + '/'
            if (dtmDate[6] == 0):	
                strDateTime = strDateTime + dtmDate[7] + '/'
            else:	
                strDateTime = strDateTime + dtmDate[6] + dtmDate[7] + '/'
                strDateTime = strDateTime + dtmDate[0] + dtmDate[1] + dtmDate[2] + dtmDate[3] + " " + dtmDate[8] + dtmDate[9] + ":" + \
                dtmDate[10] + dtmDate[11] +':' + dtmDate[12] + dtmDate[13]
            return strDateTime
        while not all_done:  
            try:
                table = self.q.get(0)
                pythoncom.CoInitialize()
                host = loops[table]
                #stdout_lock = Lock()
                #stdout_lock.acquire()
                try:
                    strComputer = host
                    objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
                    objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
                    colItems = objSWbemServices.ExecQuery("SELECT * FROM Win32_OperatingSystem")
                    colItems2 = objSWbemServices.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfOS_System")
                    for objItem in colItems:
                        log.write(host + ";" + WMIDateStringToDate(objItem.LastBootUpTime) + ";")
                        print host, WMIDateStringToDate(objItem.LastBootUpTime),
                    for objItem2 in colItems2:
                        up = int(objItem2.SystemUpTime)/60/60
                        log.write(str(up) + "\n")
                        print up
                except:
                    lPing = os.popen('ping '+ host + ' -n 1','r')
                    sLigne = lPing.read()
                    lResult = re.search('(perdus = 0)',sLigne)
                    try:
                        if ( len(lResult.groups(0)) == 1 ):
                            print "Probleme de connexion via WMI sur " + host
                    except:
                        print "Pas de réponse au ping du " + host
                finally:
                    pythoncom.CoUninitialize()
                    #stdout_lock.release() 
            except Queue.Empty:
                all_done = 1
 
 
if __name__ == "__main__":
    if os.path.exists('C:\\uptime.csv'):
        print "Suppression du fichier de resultat..."
        os.remove('C:\\uptime.csv')
    else:
        print "Le fichier de resultat n'existe pas il sera cree automatiquement..."
    print "Debut du traitement a :", time.ctime()
    start = "Debut du traitement a : " + time.ctime()
    fname = open('C:\\postes.txt', 'r')
    for line in fname:
        loops.append(line.strip('\n'))
    fname.close()
 
    q = Queue.Queue()
 
    for i in range(len(loops)):
        q.put(i)
 
    threads = []
    for i in range(maxthreads):
        t = Worker(q)
        threads.append(t)
        t.start()
 
 
    # wait for all threads to complete
 
    for t in threads:
        t.join();
 
    print "Fin du traitement a :", time.ctime() | 
Partager