Executing a program, exe’s, services on a remote Windows machine can be accomplished very easily, with a very few lines of code in Python. The task is similar to Psexec. However, in Python, one of the ways is using Windows Management Instrumentation (WMI).
From Tim Golden’s Python Stuff:
Windows Management Instrumentation (WMI) is Microsoft’s implementation of Web-Based Enterprise Management (WBEM), an industry initiative to provide a Common Information Model (CIM) for pretty much any information about a computer system.
Executing remote program using WMI needs the win32 extensions from Mark Hammond. Below are one of the sample code that I’ve used on a 32-bit target machine:
c = wmi.WMI ('my_remote_windows_machine') process_id, result = c.Win32_Process.Create (CommandLine="Notepad.exe") for process in c.Win32_Process (ProcessId=process_id): returnvalue = str(process.ProcessId) + " " + str(process.Name) if result == 0: returnvalue = "Process started successfully: %s" % returnvalue else: raise RuntimeError, "Problem creating process: %s" % str(result) print returnvalue
However, when it comes to 64-bit target machines, I’m getting errors below:
File "C:\Python26\lib\wmi.py", line 1181, in connect return _wmi_namespace (obj, find_classes) File "C:\Python26\lib\wmi.py", line 821, in __init__ self.classes.update (self.subclasses_of ()) File "C:\Python26\lib\wmi.py", line 843, in subclasses_of for c in self._namespace.SubclassesOf (root): File "C:\Python26\Lib\site-packages\win32com\client\util.py", line 84, in next return _get_good_object_(self._iter_.next(), resultCLSID = self.resultCLSID)
The solution:
c = wmi.WMI ('my_remote_windows_machine', find_classes=False) process_id, result = c.Win32_Process.Create (CommandLine="Notepad.exe") for process in c.Win32_Process (ProcessId=process_id): returnvalue = str(process.ProcessId) + " " + str(process.Name) if result == 0: returnvalue = "Process started successfully: %s" % returnvalue else: raise RuntimeError, "Problem creating process: %s" % str(result) print returnvalue
Notice the extra parameter find_classes=False when instantiating the WMI object.
Some of the good examples on WMI in Python:
Tim Golden’s Python Stuff
WMI Cookbook