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