1########################################################################### 2# 3# This program is part of Zenoss Core, an open source monitoring platform. 4# Copyright (C) 2008-2010, Zenoss Inc. 5# 6# This program is free software; you can redistribute it and/or modify it 7# under the terms of the GNU General Public License version 2, or (at your 8# option) any later version, as published by the Free Software Foundation. 9# 10# For complete information please visit: http://www.zenoss.com/oss/ 11# 12########################################################################### 13 14from ctypes import * 15 16from pysamba.twisted.reactor import reactor, eventContext 17from pysamba.library import * 18from pysamba.wbem.wbem import * 19from pysamba.wbem.Query import Query 20from pysamba.twisted.callback import WMIFailure 21import sys 22 23import logging 24log = logging.getLogger('p.t.wmic') 25 26import Globals 27from Products.ZenUtils.Driver import drive, driveLater 28 29from twisted.internet import defer 30 31def doOneDevice(creds, query, hostname): 32 def inner(driver): 33 try: 34 q = Query() 35 yield q.connect(eventContext, hostname, creds) 36 driver.next() 37 log.info("Query sent") 38 yield q.query(query) 39 result = driver.next() 40 class_name = '' 41 while 1: 42 yield result.fetchSome() 43 if not driver.next(): break 44 for obj in driver.next(): 45 props = [p for p in obj.__dict__.keys() 46 if not p.startswith('_')] 47 if obj._class_name != class_name: 48 class_name = obj._class_name 49 print obj._class_name 50 print repr(props) 51 print repr([getattr(obj, p) for p in props]) 52 q.close() 53 except Exception, ex: 54 log.exception(ex) 55 return driveLater(0.25, inner) 56 57 58def main(): 59 logging.basicConfig() 60 log = logging.getLogger() 61 log.setLevel(10) 62 DEBUGLEVEL.value = 99 63 64 creds, query = sys.argv[1:3] 65 hosts = sys.argv[3:] 66 67 def stop(result): 68 print result 69 reactor.stop() 70 def later(): 71 d = defer.DeferredList( 72 [doOneDevice(creds, query, h) for h in hosts] 73 ) 74 d.addBoth(stop) 75 reactor.callLater(1, later) 76 reactor.run() 77 78sys.exit(main()) 79