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