Re: python create WMI instances
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
[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
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
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
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
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
[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
[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