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


python create WMI instances

2005-06-10 Thread 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).

Thanks,MW.
-- 
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