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