Guest User

Untitled

a guest
Feb 14th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. #!/usr/bin/python
  2. """Checks if specified programs are present
  3. with correct version on a Windows server
  4. using wmi protocol
  5. """
  6.  
  7. import argparse
  8. import socket
  9. import sys
  10. import wmi_client_wrapper as wmi
  11.  
  12. def main():
  13. """Gets options from command line
  14. and checks if specified programs are present
  15. with correct version.
  16. """
  17.  
  18. options = get_options()
  19. programs = dict(item.split(":") for item in options.programs.split(";"))
  20. address = get_host_ip_address(options.computer)
  21. query = "SELECT Name,Version FROM Win32_Product"
  22. errors = []
  23. wmic = wmi.WmiClientWrapper(
  24. username=r"<USER_NAME>",
  25. password="<PASSWORD>",
  26. host=address
  27. )
  28.  
  29. query_result = perform_wmi_query(wmic, query)
  30. # monitored_programs = []
  31. for program_name, program_version in programs.iteritems():
  32. tmp = [x for x in query_result if x['Name'] == program_name]
  33. if tmp:
  34. wmi_program = tmp[0]
  35. if wmi_program['Version'] != program_version:
  36. errors.append("""Program {0} version is not valid.
  37. Found {1} expected {2}""".format(program_name,
  38. wmi_program['Version'],
  39. program_version))
  40. else:
  41. errors.append("Program {0} not found on system.".format(program_name))
  42.  
  43. if errors:
  44. delimiter = '\n'
  45. error = delimiter.join(errors)
  46. print "CRITICAL - some programs have incorrect versions or do not exits.\n{0}".format(error)
  47. sys.exit(2)
  48. else:
  49. print "OK - All requires programs are ok."
  50. sys.exit(0)
  51.  
  52.  
  53.  
  54.  
  55. def perform_wmi_query(wmic, query):
  56. """Preforms wmi query
  57.  
  58. Arguments:
  59. wmic {WmiClientWrapper} -- wmi object uset to connect to server
  60. query {String} -- query to be run on the server
  61.  
  62. Returns:
  63. [String] -- Output of the query
  64. """
  65.  
  66. try:
  67. output = wmic.query(query)
  68. except:
  69. print "Error connecting to host"
  70. sys.exit(3)
  71. return output
  72.  
  73.  
  74. def get_host_ip_address(hostname):
  75. """Gets ip address from DNS hostname
  76.  
  77. Arguments:
  78. hostname {String} -- DNS hostname
  79.  
  80. Returns:
  81. String -- IP address
  82. """
  83.  
  84. try:
  85. addres = socket.gethostbyname(hostname)
  86. except:
  87. print "Error, hostname not valid."
  88. sys.exit(3)
  89. return addres
  90.  
  91. def get_options():
  92. """Parse command line arguments.
  93.  
  94. Returns:
  95. [String] -- Parameters as List
  96. """
  97. parser = argparse.ArgumentParser()
  98. parser.add_argument('--computer', help='Slave name.', required=True)
  99. parser.add_argument('--programs',
  100. help='Programs in format <program>:<version> ; sepparated.',
  101. required=True)
  102. return parser.parse_args()
  103.  
  104. if __name__ == "__main__":
  105. main()
Add Comment
Please, Sign In to add comment