Re: python create WMI instances

2005-06-23 Thread future_retro
I've got as far as this.  I don't get any errors but still no
printer

 import win32com.client
 WBEM = 
 win32com.client.GetObject(rwinmgmts:{impersonationLevel=impersonate}!\\ + 
 . + r\root\cimv2)
 printer = WBEM.Get(Win32_Printer).SpawnInstance_()
 printer.Properties_('DeviceID').Value = 'myprinter'
 printer.Properties_('DriverName').Value = 'HP 2000C'
 printer.Properties_('Location').Value = 'myoffice'
 printer.Properties_('Network').Value = 'True'
 printer.Properties_('Shared').Value = 'True'
 printer.Properties_('ShareName').Value = 'myprintershare'
 printer.Put_

Do I need to specify any flags with Put_  ?

Thanks for all your help, I can almost taste victory!

MW.

Tim Golden wrote:
 [EMAIL PROTECTED]
 | Win32_Printer doesn't work with the Create method and
 | AddPrinterConnection only lets me add a connection to a share.  I'll
 | try and work out how to set the printer object properties in
 | the format
 | suggested;
 |
 | oPrinter.Properties_ (DriverName).Value = strDriver
 |
 | Cheers, MW.

 I'm sorry my module won't have been much use to you
 in this, but it would be *really* helpful if you
 could post [a fragment of] the code you come up with
 so I can see what changes I need to make to help our
 future instance-spawners. It's just that I've never
 had the need to do this, and don't have any time to
 experiment at present.

 Thanks
 TJG

 
 This e-mail has been scanned for all viruses by Star. The
 service is powered by MessageLabs. For more information on a proactive
 anti-virus service working around the clock, around the globe, visit:
 http://www.star.net.uk
 

-- 
http://mail.python.org/mailman/listinfo/python-list


RE: python create WMI instances

2005-06-23 Thread Tim Golden
[EMAIL PROTECTED]
| I've got as far as this.  I don't get any errors but still no
| printer
| 
|  import win32com.client
|  WBEM = 
| win32com.client.GetObject(rwinmgmts:{impersonationLevel=imper
| sonate}!\\ + . + r\root\cimv2)
|  printer = WBEM.Get(Win32_Printer).SpawnInstance_()
|  printer.Properties_('DeviceID').Value = 'myprinter'
|  printer.Properties_('DriverName').Value = 'HP 2000C'
|  printer.Properties_('Location').Value = 'myoffice'
|  printer.Properties_('Network').Value = 'True'
|  printer.Properties_('Shared').Value = 'True'
|  printer.Properties_('ShareName').Value = 'myprintershare'
|  printer.Put_
| 
| Do I need to specify any flags with Put_  ?


Well you certainly need to call it -- printer.Put_ () --
and not just refer to it. But maybe that's just a cut-and-paste
problem. In theory (according to the docs) you could pass a
CREATE_ONLY flag (or something like that) but I don't think
it's strictly necessary. I'd imagine that it would create if
it didn't exist. Check out msdn for more details than you
want to know.

TJG


This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: python create WMI instances

2005-06-23 Thread future_retro
Right I got it working.  I had to put a printer port in aswell.  I'll
now look at a script to create printer ports.  My goal is being able to
query the printers on print server x and then recreate the printers
(shares and ports) on print server y.

Thanks, for all your help Tim, much appreciated. MW

import win32com.client
WBEM =
win32com.client.GetObject(rwinmgmts:{impersonationLevel=impersonate}!\\
+ . + r\root\cimv2)
printer = WBEM.Get(Win32_Printer).SpawnInstance_()
printer.Properties_('DeviceID').Value = 'myprinter'
printer.Properties_('DriverName').Value = 'HP 2000C'
printer.Properties_('Location').Value = 'myoffice'
printer.Properties_('Network').Value = 'True'
printer.Properties_('Shared').Value = 'True'
printer.Properties_('ShareName').Value = 'myprintershare'
printer.Properties_('PortName').Value = 'IP_169.254.110.14'
printer.Put_()

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: python create WMI instances

2005-06-23 Thread future_retro
Heres a script for creating printer ports

import win32com.client
WBEM =
win32com.client.GetObject(rwinmgmts:{impersonationLevel=impersonate}!\\
+ . + r\root\cimv2)
printer = WBEM.Get(Win32_Printer).SpawnInstance_()
printer.Properties_('DeviceID').Value = 'myprinter'
printer.Properties_('DriverName').Value = 'HP 2000C'
printer.Properties_('Location').Value = 'myoffice'
printer.Properties_('Network').Value = 'True'
printer.Properties_('Shared').Value = 'True'
printer.Properties_('ShareName').Value = 'myprintershare'
printer.Properties_('PortName').Value = 'IP_169.254.110.14'
printer.Put_()

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: python create WMI instances

2005-06-22 Thread future_retro
Create isn't a method of Win32_Printer so I couldn't get that to work.
.Create is a method of Win32_Process which (wait for it..) creates a
new process.  Unfortunatly there is no method to add a printer.  the
method .AddPrinterConnection will allow me to add a connection to an
existing print share but I want to create a printer with the option of
sharing it.

I think I'll have to do this with spawninstance.





Tim Golden wrote:
 [Marc Wyburn]
 |
 | Hi all, I am struggling with a vb - python code conversion.  I'm using
 | WMI to create printers on remote machines using (in VB);
 |
 | set oPrinter = oService.Get(Win32_Printer).SpawnInstance_
 |
 | oPrinter.DriverName = strDriver
 | oPrinter.PortName   = strPort
 | oPrinter.DeviceID   = strPrinter
 | oPrinter.Put_(kFlagCreateOnly)
 |
 | In python I have logged onto the WMI service on the remote machine and
 | I can run things like c.new.AddPrinterConnection so I know that I am
 | connected and working OK.  I don't get any errors when I create a new
 | object with SpawnInstance_ but when I try to set the value of
 | oPrinter.Drivername I get an error saying that the Drivername object
 | doesn't exist.  Does anyone know how to set the values of the object
 | using either the method above or with the WMI module?  I think the WMI
 | module only allows access to modify methods such ADDPrinterConnection
 | or Create (from Win32_Service).

 Not sure if I can help here or not, but just in case...

 As far as I understand you, the fact that you're creating
 on a remote machine is just an incidental, ie you'd have
 the same problem doing this locally.

 Part of the problem is that when VB does something
 like:

 oPrinter.DriverName = strDriver

 what's really happening behind the scenes is something
 like:

 oPrinter.Properties_ (DriverName).Value = strDriver

 Now you can do that in Python. (In fact, that's what
 the wmi module does when it overrides __setattr__, followed
 by a Put_). So if you want to translate code fairly literally,
 then carry on as you were, but substitute the latter code for
 the former.

 Having said that, the wmi module *can* create new instances
 of classes. The problem is that I had/have little knowledge
 of how WMI works in this area, so what I've done may not
 be right. The method you're looking for is .new (aliased
 as .new_instance_of) and if you use help on that method,
 you'll get this:

 new(self, wmi_class) unbound wmi.WMI method
 Create a new whatever, typically something like
 Win32_Process, eg:

 c = wmi.WMI (remote_machine)
 for p in c.Win32_Process (name=notepad.exe): print p
 c.new (Win32_Process).Create (CommandLine=notepad.exe)
 for p in c.Win32_Process (name=notepad.exe): print p
 p.Terminate ()
 for p in c.Win32_Process (name=notepad.exe): print p

 Now this example works, but I notice from the code
 that what I did to make it work was to remove the
 SpawnInstance_ which I had, and replace it by an
 instance retrieval. ie I just do a Get on the class.

 I'll try to find some examples around of what you're
 doing which, up till now, I've not really needed to
 do. Meanwhile, I hope the above info is of some use.

 Feel free to respond with questions or comments. This
 can only get clearer!

 TJG

 
 This e-mail has been scanned for all viruses by Star. The
 service is powered by MessageLabs. For more information on a proactive
 anti-virus service working around the clock, around the globe, visit:
 http://www.star.net.uk
 

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: python create WMI instances

2005-06-22 Thread future_retro
Win32_Printer doesn't work with the Create method and
AddPrinterConnection only lets me add a connection to a share.  I'll
try and work out how to set the printer object properties in the format
suggested;

oPrinter.Properties_ (DriverName).Value = strDriver 

Cheers, MW.

-- 
http://mail.python.org/mailman/listinfo/python-list


RE: python create WMI instances

2005-06-22 Thread Tim Golden
[EMAIL PROTECTED]
| Win32_Printer doesn't work with the Create method and
| AddPrinterConnection only lets me add a connection to a share.  I'll
| try and work out how to set the printer object properties in 
| the format
| suggested;
| 
| oPrinter.Properties_ (DriverName).Value = strDriver 
| 
| Cheers, MW.

I'm sorry my module won't have been much use to you
in this, but it would be *really* helpful if you
could post [a fragment of] the code you come up with
so I can see what changes I need to make to help our
future instance-spawners. It's just that I've never
had the need to do this, and don't have any time to
experiment at present.

Thanks
TJG


This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk

-- 
http://mail.python.org/mailman/listinfo/python-list


RE: python create WMI instances

2005-06-10 Thread Tim Golden
[Marc Wyburn]
| 
| Hi all, I am struggling with a vb - python code conversion.  I'm using
| WMI to create printers on remote machines using (in VB);
| 
| set oPrinter = oService.Get(Win32_Printer).SpawnInstance_
| 
| oPrinter.DriverName = strDriver
| oPrinter.PortName   = strPort
| oPrinter.DeviceID   = strPrinter
| oPrinter.Put_(kFlagCreateOnly)
| 
| In python I have logged onto the WMI service on the remote machine and
| I can run things like c.new.AddPrinterConnection so I know that I am
| connected and working OK.  I don't get any errors when I create a new
| object with SpawnInstance_ but when I try to set the value of
| oPrinter.Drivername I get an error saying that the Drivername object
| doesn't exist.  Does anyone know how to set the values of the object
| using either the method above or with the WMI module?  I think the WMI
| module only allows access to modify methods such ADDPrinterConnection
| or Create (from Win32_Service).

Not sure if I can help here or not, but just in case...

As far as I understand you, the fact that you're creating
on a remote machine is just an incidental, ie you'd have
the same problem doing this locally.

Part of the problem is that when VB does something
like:

oPrinter.DriverName = strDriver

what's really happening behind the scenes is something
like:

oPrinter.Properties_ (DriverName).Value = strDriver

Now you can do that in Python. (In fact, that's what
the wmi module does when it overrides __setattr__, followed
by a Put_). So if you want to translate code fairly literally, 
then carry on as you were, but substitute the latter code for 
the former.

Having said that, the wmi module *can* create new instances
of classes. The problem is that I had/have little knowledge
of how WMI works in this area, so what I've done may not
be right. The method you're looking for is .new (aliased
as .new_instance_of) and if you use help on that method, 
you'll get this:

new(self, wmi_class) unbound wmi.WMI method
Create a new whatever, typically something like
Win32_Process, eg:

c = wmi.WMI (remote_machine)
for p in c.Win32_Process (name=notepad.exe): print p
c.new (Win32_Process).Create (CommandLine=notepad.exe)
for p in c.Win32_Process (name=notepad.exe): print p
p.Terminate ()
for p in c.Win32_Process (name=notepad.exe): print p

Now this example works, but I notice from the code
that what I did to make it work was to remove the
SpawnInstance_ which I had, and replace it by an
instance retrieval. ie I just do a Get on the class.

I'll try to find some examples around of what you're
doing which, up till now, I've not really needed to
do. Meanwhile, I hope the above info is of some use.

Feel free to respond with questions or comments. This
can only get clearer!

TJG


This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk

-- 
http://mail.python.org/mailman/listinfo/python-list