Executing a remote process via WMI in Win32.

S

Sean

I can connect to a machine remotely with no problems but I'm having trouble
trying to create a process remotely. Initially this was a perl and VB
script which I'm converting to python. Its entire purpose is to start a
process remotely. The problem initially was that the perl script could not
'see' any mapped drives as it would alway return 'access denied' so I'm
trying to not only rewrite the script but fix this problem and my idea was
to connect with the Administrator account.

Now the following script sort of works. I can get the set of running
processes but it dies out when I try to create one.

## being ##
import win32com.client
wmi = win32com.client.Dispatch('wbemscripting.swbemlocator')
remote_machine =
wmi.ConnectServer('<MACHINE>','root\\cimv2',Administrator','<PASSWORD>')

process = remote_machine.InstancesOf("Win32_Process")
for proc in process:
size = int(proc.WorkingSetSize)/1024
print proc.Caption, size,"kb"
# test to see if we can 'see' what's on a mapped drive.
# doesn't seem to go.
process.Create("cmd.exe /K dir w:\\")
## END ##

The script will print out all the processes fine but once it get's to
'Create' it dies out with and error message I don't understand.

NOTEPAD.EXE 80 kb
Traceback (most recent call last):
File "C:\Documents and Settings\scody\test.py", line 14, in ?
process.Create("cmd.exe /K dir w:\\")
File "C:\Python23\lib\site-packages\win32com\client\dynamic.py", line 460,
in
__getattr__
raise AttributeError, "%s.%s" % (self._username_, attr)
AttributeError: InstancesOf.Create

The process method should only have the one parameter as defined at:
http://userpages.umbc.edu/~kbradl1/wsz/ref/WMIref.html#process

I just tried using the 'Terminate' process but that didn't work either....

So I'm going to assume that the WMI objects are not instantiated as python
classes (hence why the methods are not working). Am I completely off base
here (meaning it is a syntax problem)?

Any suggestions or pointers to the right direction would be creately
appriciated...
 
J

jose maria

Sean said:
I can connect to a machine remotely with no problems but I'm having trouble
trying to create a process remotely. Initially this was a perl and VB
script which I'm converting to python. Its entire purpose is to start a
process remotely. The problem initially was that the perl script could not
'see' any mapped drives as it would alway return 'access denied' so I'm
trying to not only rewrite the script but fix this problem and my idea was
to connect with the Administrator account.

Now the following script sort of works. I can get the set of running
processes but it dies out when I try to create one.

## being ##
import win32com.client
wmi = win32com.client.Dispatch('wbemscripting.swbemlocator')
remote_machine =
wmi.ConnectServer('<MACHINE>','root\\cimv2',Administrator','<PASSWORD>')

process = remote_machine.InstancesOf("Win32_Process")
for proc in process:
size = int(proc.WorkingSetSize)/1024
print proc.Caption, size,"kb"
# test to see if we can 'see' what's on a mapped drive.
# doesn't seem to go.
process.Create("cmd.exe /K dir w:\\")
## END ##

The script will print out all the processes fine but once it get's to
'Create' it dies out with and error message I don't understand.

NOTEPAD.EXE 80 kb
Traceback (most recent call last):
File "C:\Documents and Settings\scody\test.py", line 14, in ?
process.Create("cmd.exe /K dir w:\\")
File "C:\Python23\lib\site-packages\win32com\client\dynamic.py", line 460,
in
__getattr__
raise AttributeError, "%s.%s" % (self._username_, attr)
AttributeError: InstancesOf.Create

The process method should only have the one parameter as defined at:
http://userpages.umbc.edu/~kbradl1/wsz/ref/WMIref.html#process

I just tried using the 'Terminate' process but that didn't work either....

So I'm going to assume that the WMI objects are not instantiated as python
classes (hence why the methods are not working). Am I completely off base
here (meaning it is a syntax problem)?

Any suggestions or pointers to the right direction would be creately
appriciated...



Hi Sean I´m now work in a module that create several kind of methods
to manage process using wmi take one example:

I´m use ActiveState Python 2.2.1 firts you have it´s that python know
of existencie of WMI for instance you must use COMMakepy utility now
Python *knows* about the 'WMI Scripting' typelibrary.

Note:this part of script its tested in windows 2000 and its functional
except in windows 2000 with SP2 that failed and I don´t know why

Example create process:
(After Use Makepy)
import win32com.client
wmi = win32com.client.Dispatch('wbemscripting.swbemlocator')
remote_machine =
wmi.ConnectServer('<MACHINE>','root\\cimv2',Administrator','<PASSWORD>')
strProcess=("cmd.exe /K & dir w:\\") #this is very important you must
put &
objprocess = remote_machine.Get('Win32_Process')
Method = objProcess.Methods_('Create')
InParameters = Method.InParameters.SpawnInstance_()
InParameters.Properties_.Item('CommandLine').Value=strProcess
try:
OutParameters = objProcess.ExecMethod_ ('Create',InParameters)
ReturnValue = OutParameters.Properties_.Item('ReturnValue').Value
ProcessID = OutParameters.Properties_.Item('ProcessId').Value
except pythoncom.com_error, (hr,msg,exc,arg):
ExceptionHandler(hr,msg,exc,arg)

def ExceptionHandler (self,hr,msg,exc,arg):
print 'COM call failed: %s' % msg
if exc is not None:
wcode, source, text, helpFile, helpID, scode = exc
print 'Error source:',source
print text
print 'See also: %s (id=%d)' % (helpFile,helpID)


Example kill process:

strPid="'yourpid'" # In this form else not work
sql="SELECT * FROM Win32_Process WHERE ProcessId=%s" %strPid
objProc=objprocess.ExecQuery(sql)
if objProc.Count==0:
print "Pid strPid Not Found"
else:
for process in objProc:
strmeth = process.Methods_('Terminate')
strparms=strmeth.InParameters
strparms.Properties_('Reason').Value=0
process.ExecMethod_('Terminate',strparms)

Sorry Sean for my bad Enghlis I hope help you
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,043
Latest member
CannalabsCBDReview

Latest Threads

Top