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