Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > WMI remote call in python script to create process on remote windowscomputer

Reply
Thread Tools

WMI remote call in python script to create process on remote windowscomputer

 
 
davidj411
Guest
Posts: n/a
 
      10-05-2009
import win32com.client
computer = "server"
strUser = "server\user_name"
strPassword ="my_password"
objSWbemLocator = win32com.client.Dispatch
("WbemScripting.SWbemLocator")
objSWbemServices = objSWbemLocator.ConnectServer(computer, "root
\cimv2",strUser,strPassword)
objCreateProc = objSWbemServices.Get("Win32_Process")
ProcessID = u"200"
objCreateProc.Create(u"cabarc n c:\\temp\\test123.PY.cab c:\\temp\
\dmj.new.log",u"c:\\temp",u' ',ProcessID )

error returned:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\path\remote.process.py", line 20, in <module>
objCreateProc.Create(u"cmd /c cabarc n c:\\temp\\test123.PY.cab c:\
\temp\\new.log",u"c:\\temp",u'',ProcessID )

what is causing this "int" error?

i have tried this with and without Unicode.
i'd like to do this without having a need to use Tim Golden's wmi
module.
 
Reply With Quote
 
 
 
 
Tim Golden
Guest
Posts: n/a
 
      10-06-2009
davidj411 wrote:
> import win32com.client
> computer = "server"
> strUser = "server\user_name"
> strPassword ="my_password"
> objSWbemLocator = win32com.client.Dispatch
> ("WbemScripting.SWbemLocator")
> objSWbemServices = objSWbemLocator.ConnectServer(computer, "root
> \cimv2",strUser,strPassword)
> objCreateProc = objSWbemServices.Get("Win32_Process")
> ProcessID = u"200"
> objCreateProc.Create(u"cabarc n c:\\temp\\test123.PY.cab c:\\temp\
> \dmj.new.log",u"c:\\temp",u' ',ProcessID )
>
> error returned:
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "C:\path\remote.process.py", line 20, in <module>
> objCreateProc.Create(u"cmd /c cabarc n c:\\temp\\test123.PY.cab c:\
> \temp\\new.log",u"c:\\temp",u'',ProcessID )
>
> what is causing this "int" error?


Not clear which "int" error you mean, but trying to help anyway...

You need to use raw strings (or use double-backslashes). That
may or may not be the cause of your problems, but it certainly
won't help. You may also run into theoretical restrictions of
what remote WMI processes can achieve (no desktop/windowstation etc.).


> i have tried this with and without Unicode.
> i'd like to do this without having a need to use Tim Golden's wmi
> module.


To ask the obvious question: why? I'm not offended, just curious

TJG
 
Reply With Quote
 
 
 
 
Dave Angel
Guest
Posts: n/a
 
      10-06-2009
davidj411 wrote:
> import win32com.client
> computer = "server"
> strUser = "server\user_name"
> strPassword ="my_password"
> objSWbemLocator = win32com.client.Dispatch
> ("WbemScripting.SWbemLocator")
> objSWbemServices = objSWbemLocator.ConnectServer(computer, "root
> \cimv2",strUser,strPassword)
> objCreateProc = objSWbemServices.Get("Win32_Process")
> ProcessID = u"200"
> objCreateProc.Create(u"cabarc n c:\\temp\\test123.PY.cab c:\\temp\
> \dmj.new.log",u"c:\\temp",u' ',ProcessID )
>
> error returned:
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "C:\path\remote.process.py", line 20, in <module>
> objCreateProc.Create(u"cmd /c cabarc n c:\\temp\\test123.PY.cab c:\
> \temp\\new.log",u"c:\\temp",u'',ProcessID )
>
> what is causing this "int" error?
>
> i have tried this with and without Unicode.
> i'd like to do this without having a need to use Tim Golden's wmi
> module.
>
>

As Tim says, you need to double your backslashes. You have several
places where they are not properly escaped. Alternatively, at least in
all these cases, you could use the raw strings.

But the real problem with your message would seem to be that you retyped
the material, with typos. And didn't include the entire error message.
Copy/paste are your friend. And in case you don't know how to do that
from a Windows console window, just ask. Or try Right-click on the
title bar for some ideas.

I don't have specific answers for you -- I don't currently do remote
stuff this way. But you'll get better answers if you try the above.

DaveA
 
Reply With Quote
 
David Jackson
Guest
Posts: n/a
 
      10-07-2009
ok, cut and pasted, but changed the username/password to protect the innocent.
this is from interactive prompt.
let me know if i am still not doing the slashes correctly please.
i doubt authentication is the issue.; i can get pid information using
WQL queries.
objCreateProc.Create expects 4 strings (not objects?), right?

version info:
>>> sys.version

'2.6 (r26:66721, Oct 2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)]'

>>> import win32com.client
>>> computer = "servername"
>>> strUser = "servername\\my_account"
>>> strPassword ="shh_secret"
>>> objSWbemLocator = win32com.client.Dispatch("WbemScripting.SWbemLocat or")
>>> objSWbemServices = objSWbemLocator.ConnectServer(computer, r"root\cimv2",strUser,strPassword)
>>> objCreateProc = objSWbemServices.Get("Win32_Process")
>>> ProcessID = u"200"
>>> objCreateProc.Create(u"cmd /c ping 127.0.0.1 >>c:\\temp\\finall.log",u"c:\\temp",u' ',ProcessID )

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable


how can i see the method available?
>>> help(objCreateProc) just gives me "Help on instance of CDispatch in module win32com.client:"


Thanks
David
 
Reply With Quote
 
Dave Angel
Guest
Posts: n/a
 
      10-08-2009
David Jackson wrote:
> ok, cut and pasted, but changed the username/password to protect the innocent.
> this is from interactive prompt.
> let me know if i am still not doing the slashes correctly please.
> i doubt authentication is the issue.; i can get pid information using
> WQL queries.
> objCreateProc.Create expects 4 strings (not objects?), right?
>
> version info:
>
>>>> sys.version
>>>>

> '2.6 (r26:66721, Oct 2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)]'
>
>
>>>> import win32com.client
>>>> computer = "servername"
>>>> strUser = "servername\\my_account"
>>>> strPassword ="shh_secret"
>>>> objSWbemLocator = win32com.client.Dispatch("WbemScripting.SWbemLocat or")
>>>> objSWbemServices = objSWbemLocator.ConnectServer(computer, r"root\cimv2",strUser,strPassword)
>>>> objCreateProc = objSWbemServices.Get("Win32_Process")
>>>> ProcessID = u"200"
>>>> objCreateProc.Create(u"cmd /c ping 127.0.0.1 >>c:\\temp\\finall.log",u"c:\\temp",u' ',ProcessID )
>>>>

> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> TypeError: 'int' object is not callable
>
>
> how can i see the method available?
>
>>>> help(objCreateProc) just gives me "Help on instance of CDispatch in module win32com.client:"
>>>>

>
> Thanks
> David
>
>

Looks to me like

objCreateProc.Create has an integer value.

You could add a print for that value before the call to objCreateProc.Create(). (Leave off the parentheses on the print statement)

My guess is that you've got an address there, but I have no idea how to convert that to a valid Python function pointer. Is there reasonable docs for WMI somewhere?

DaveA



 
Reply With Quote
 
Tim Golden
Guest
Posts: n/a
 
      10-08-2009
David Jackson wrote:
> ok, cut and pasted, but changed the username/password to protect the innocent.
> this is from interactive prompt.
> let me know if i am still not doing the slashes correctly please.
> i doubt authentication is the issue.; i can get pid information using
> WQL queries.
> objCreateProc.Create expects 4 strings (not objects?), right?


Invoking a method isn't as easy as that, I'm afraid. At
the risk of being boring, can I ask again why you aren't
using the wmi module, which solves these problems for
you?

In short you want to do something like this:
(simplified for testing purposes to use the local machine)

<code>
import win32com.client

wmi = win32com.client.GetObject ("winmgmts:")
win32_process = wmi.Get ("Win32_Process")
in_parameters = win32_process.Methods_ ("Create").InParameters
in_parameters.Properties_ ('CommandLine').Value = "notepad.exe"
result = win32_process.ExecMethod_ ("Create", in_parameters)

</code>



TJG
 
Reply With Quote
 
Processor-Dev1l
Guest
Posts: n/a
 
      10-08-2009
On Oct 8, 10:22*am, Tim Golden <m...@timgolden.me.uk> wrote:
> David Jackson wrote:
> > ok, cut and pasted, but changed the username/password to protect the innocent.
> > this is from interactive prompt.
> > let me know if i am still not doing the slashes correctly please.
> > i doubt authentication is the issue.; i can get pid information using
> > WQL queries.
> > objCreateProc.Create expects 4 strings (not objects?), right?

>
> Invoking a method isn't as easy as that, I'm afraid. At
> the risk of being boring, can I ask again why you aren't
> using the wmi module, which solves these problems for
> you?
>
> In short you want to do something like this:
> (simplified for testing purposes to use the local machine)
>
> <code>
> import win32com.client
>
> wmi = win32com.client.GetObject ("winmgmts:")
> win32_process = wmi.Get ("Win32_Process")
> in_parameters = win32_process.Methods_ ("Create").InParameters
> in_parameters.Properties_ ('CommandLine').Value = "notepad.exe"
> result = win32_process.ExecMethod_ ("Create", in_parameters)
>
> </code>
>
> TJG


Good point, I would like just to add this:
wmi = win32com.client.GetObject ("winmgmts:\\\\usernameassword@host\
\root\\cimv2")
and it is perfect
 
Reply With Quote
 
Tim Golden
Guest
Posts: n/a
 
      10-08-2009
Processor-Dev1l wrote:
> On Oct 8, 10:22 am, Tim Golden <m...@timgolden.me.uk> wrote:
>> David Jackson wrote:
>>> ok, cut and pasted, but changed the username/password to protect the innocent.
>>> this is from interactive prompt.
>>> let me know if i am still not doing the slashes correctly please.
>>> i doubt authentication is the issue.; i can get pid information using
>>> WQL queries.
>>> objCreateProc.Create expects 4 strings (not objects?), right?

>> Invoking a method isn't as easy as that, I'm afraid. At
>> the risk of being boring, can I ask again why you aren't
>> using the wmi module, which solves these problems for
>> you?
>>
>> In short you want to do something like this:
>> (simplified for testing purposes to use the local machine)
>>
>> <code>
>> import win32com.client
>>
>> wmi = win32com.client.GetObject ("winmgmts:")
>> win32_process = wmi.Get ("Win32_Process")
>> in_parameters = win32_process.Methods_ ("Create").InParameters
>> in_parameters.Properties_ ('CommandLine').Value = "notepad.exe"
>> result = win32_process.ExecMethod_ ("Create", in_parameters)
>>
>> </code>
>>
>> TJG

>
> Good point, I would like just to add this:
> wmi = win32com.client.GetObject ("winmgmts:\\\\usernameassword@host\
> \root\\cimv2")
> and it is perfect


I wasn't aware of that form of moniker construction
(ie with the username / password embedded) and on
an XP-to-2k3 link it doesn't seem to work. Is it a
Vista / 2k8 extension? Obviously, above, I was relying
on the fact that the default default namespace (as opposed
to the DEFAULT namespace ) is root\cimv2.

TJG
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Need basic help authenticating remote wmi call from an asp webpage Mark ASP General 2 11-05-2007 03:32 PM
RE: python create WMI instances Tim Golden Python 1 06-23-2005 12:39 PM
RE: python create WMI instances Tim Golden Python 2 06-22-2005 03:35 PM
python create WMI instances Marc Wyburn Python 0 06-10-2005 10:58 AM
Executing a remote process via WMI in Win32. Sean Python 1 07-10-2003 12:41 PM



Advertisments