Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problem with script to add printers ports, need help.

183 views
Skip to first unread message

rham

unread,
May 5, 2005, 12:12:04 PM5/5/05
to
I am trying to add a large quantity of printers to a new printserver. I
first want to add the printer ports but I am running into a problem.
Whenever I run the script below it errors out with "Access Denied".

Just for the heck of it I ran the template script from the script center and
I get the same error. Does anyone have an idea why I get that error? Am I
missing something in my script? And yes I am admin on the box.

Here is the script.

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Printer\New_ports.xls")
objExcel.Visible = True
intRow = 2
Do Until objExcel.Cells(intRow,1).Value = ""
strComputer = "."
Set objWMIService = GetObject("winmgmts:")
Set objNewPort = objWMIService.Get _
("Win32_TCPIPPrinterPort").SpawnInstance_
objNewPort.Name = objExcel.Cells(intRow,5).Value
objNewPort.Protocol = 1
objNewPort.HostAddress = objExcel.Cells(intRow,1).Value
objNewPort.PortNumber = "9100"
objNewPort.SNMPEnabled = False
objNewPort.Put_
intRow = intRow + 1
Loop
objExcel.Quit

I appreciate any advice.

Thanks,

Ray

Jim Vierra

unread,
May 5, 2005, 1:07:29 PM5/5/05
to
What line number. Is it happening on the "Put_". or the new instance.

Put trace statements in file to see. "WScript.Echo "We Are here trace" ...
etc.

Last line to send output is line before failure. Or count lines from top of
notepad starting with "1".
--
Jim Vierra

"rham" <rh...@discussions.microsoft.com> wrote in message
news:103C6124-3C6E-45F0...@microsoft.com...

rham

unread,
May 5, 2005, 2:01:01 PM5/5/05
to
The error is occuring at the objnewPort.Put_ line. The error message states:

Line:15
Char:2
Error: Access Denied
Code: 80041003
Source: SWbemObjectEx

Thanks,

Ray

Jim Vierra

unread,
May 5, 2005, 2:06:46 PM5/5/05
to
What version of windows?
Do you have admin rights on the machine?
What service pack level?


--
Jim Vierra

"rham" <rh...@discussions.microsoft.com> wrote in message

news:E885E46B-48B3-42D7...@microsoft.com...

rham

unread,
May 5, 2005, 2:18:04 PM5/5/05
to
Server 2003 Standard with all current patches except SP1. I am signed on
with my domain account that has admin rights.

Jim Vierra

unread,
May 5, 2005, 3:08:57 PM5/5/05
to
I checked the WMI reference. All properties are read-only. This is
probably not the way to create a port. It looks like it is used for getting
info and status.

You might try doing it with "Security" privilege on the "impersonate"
clause.

--
Jim Vierra

"rham" <rh...@discussions.microsoft.com> wrote in message

news:E9B75824-9C8D-4D41...@microsoft.com...

Torgeir Bakken (MVP)

unread,
May 5, 2005, 3:20:45 PM5/5/05
to
rham wrote:

Hi,

You cannot use Win32_TCPIPPrinterPort to add a port, as Jim wrote,
all the properties in that class are Read-Only:
http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_tcpipprinterport.asp


Another alternative is to use the prnadmin.dll that comes with the
MS Windows 2003 Server Resource Kit.

With prnadmin.dll you can e.g. do the following port handling from
e.g. VBScript:

- Adding/deleting ports (standard local ports, TCP LPR/RAW ports)
(local or remote)

Windows Server 2003 Resource Kit Tools
http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en

(The kit will install on WinXP or later, but you can copy needed
files over to other computers, and then run regsvr32.exe against
prnadmin.dll)


More about PrnAdmin (from the RK help file):

Printer Administration Objects (PrnAdmin) is a COM-based tool that
provides large-scale, noninteractive control of printers, drivers,
and ports on local and remote computers.

Using PrnAdmin, you can:

Add and delete a local or remote printer.
Add and delete printer connections.
Add and delete a local or remote form.
Add and delete a local or remote standard TCP/IP port (of type
Line Printer Remote (LPR) or RAW).
Add and delete a local or remote driver.
View a list of printers, ports, drivers, and forms on a local or
remote computer.
Control and configure a local or remote printer.


PrnAdmin consists of several scriptable COM objects residing in
Prnadmin.dll, which functions as a wrapper around Printui.dll.
Several Microsoft Visual Basic Script (VBScript) sample files are
included with the tool.

Note

For more detailed information on how to use PrnAdmin.DLL, see
Prnadmin.doc. This white paper provides additional information on
printer, drivers, ports and forms to help administrators and
programmers manage a large number of local and remote printers.

Corresponding Operating System Features

All the functionality of prnadmin.dll can be duplicated using the
printers folder and various wizards. Converting printer ports from
LPR to Standard TCP/IP is the only functionality in prnadmin.dll
for which there is no corresponding GUI.

For more information about PrnAdmin and the Windows Management
Instrumentation (WMI) scripts in Windows Server 2003, see
Designing and Deploying Print
Servers(http://go.microsoft.com/fwlink/?LinkID=4745) in the
Windows Server 2003 Deployment Kit.


Files Required

Prnadmin.dll

The following sample VBScript files are also included:

Prnadmin.doc
Clean.vbs
Clone.vbs (there is no WMI equivalent for the cloning script)
Conall.vbs
Defprn.vbs
Drvmgr.vbs
Forms.vbs
Persist.vbs
Portconv.vbs
Portmgr.vbs
Prncfg.vbs
Prnctrl.vbs
Prndata.vbs
Prnmgr.vbs


and

HOW TO: Programmatically Create a Printer and Printer Port by
Using PrinterAdmin (Prnadmin.dll) with a Visual Basic Script
in Microsoft Windows 2000
http://support.microsoft.com/default.aspx?scid=kb;en-us;321025

--
torgeir, Microsoft MVP Scripting and WMI, Porsgrunn Norway
Administration scripting examples and an ONLINE version of
the 1328 page Scripting Guide:
http://www.microsoft.com/technet/scriptcenter/default.mspx

rham

unread,
May 5, 2005, 3:26:01 PM5/5/05
to
I created this script on a WinXP machine without any problems but it doesn't
work on 2k3. I basically copied the template from the Script Center that
says it works on Windows 2003(See below).

Set objWMIService = GetObject("winmgmts:")
Set objNewPort = objWMIService.Get _
("Win32_TCPIPPrinterPort").SpawnInstance_

objNewPort.Name = "IP_169.254.110.14"
objNewPort.Protocol = 1
objNewPort.HostAddress = "169.254.110.14"
objNewPort.PortNumber = "9999"
objNewPort.SNMPEnabled = False
objNewPort.Put_

Also, I did try to do the impersonate privilege without success. Very
frustrating.

Jim Vierra

unread,
May 5, 2005, 4:07:41 PM5/5/05
to
rham, Torgeir
the following is from WMI docs.  I tested on WS2003 SP1 which should have all updates that XP has.  I suspect that WMI allows spawn to create extra pieces such as elements of a collection. TCPIPPrinterPorts looks to be a repository of instance pointers but not where they are created. If you manually reset a port it only has a name in it's TCPIPPrinter port instance.  The rest of the information is held elsewhere.  If we can find which class is actually being created we may be able to do it a different way.
 
In my experience, for security reasons, many things are more tightly controlled on server products.  This may account for the difference.
 
For practical use, Torgeirs suggestion to use the RK dll is the best here as it should guarantee that the script will work on all versions of Windows the same way.

WMI documentation.

Some WMI classes (including Win32_Share and Win32_Process) include a Create method. If a class includes the Create method, that method can be used to create such things as a new shared folder or a new process. (or a new port)

Creating a new resource requires you to use the Get method to bind to the actual WMI class (rather than retrieve instances of the class). After you have an object representing the class, use the SpawnInstance_ method to create a new, "blank," instance of the class. Configure properties for the instance, and then call the Create method.

TCPIPPrinterPort has no "Create" method in Windows 2003.  Interestingly it is marked as "Supports Create=True" on both XP and WS2003 which leads me to believe that it is either security or a bug.  If WS2003 is in a Domain or is a DC then perhaps AD is overriding the creation due to schema restrictions; assuming the port exists in AD.  The error is "Access Denied" as opposed to an object creation error that comes when the object can't be created due to an underlying missing component in the COM object.
 
I checked DCOM on both XP and WS2003 and found no differences between WMI on either machine.  Of course we still have individual security on WMI objects.  The object security showed the "Security" permission when I added it to the connect but it may require an extra internal privilege.
 
I tested on a non-domain connected XP machine and it worked correctly and all of the properties fill in unlike WS2003.
 
I suspect security or a bug.
 
Solving this would allow for  a more consistent methodology when admins use WMI.  Too many external solutions are retro to the MS/WMI philosophy. We need to contact the WMI team and have them respond to this issue.

--
Jim Vierra

rham

unread,
May 5, 2005, 4:12:06 PM5/5/05
to
Jim and Torgeir, thank you for your help.

Ray

Jim Vierra

unread,
May 5, 2005, 9:09:05 PM5/5/05
to
Added information.  Extended error on manual creation using wbemtest shows "abstract class" error and parameter error.  Trying to delete instance with wbemtest throws "access denied" error.  This seems to point to security as both of these work without error on XP.
 
When checking privileges I find that WS2003 requires "SeLoadDriverPrivilege" and XP does not define any extra privileges.
--
Jim Vierra
"Jim Vierra" <jvi...@msn.com> wrote in message news:eekCl4aU...@TK2MSFTNGP15.phx.gbl...

greggplatinum

unread,
Jun 27, 2007, 10:46:04 AM6/27/07
to

I have been experiencing the exact same issue.

Server:
Windows Server 2003 R2, SP1

Workstation:
Windows XP Professional, SP2

The script, which I will paste below, works fine on my XP machine. I
can create the port AND the printer on my XP workstation.

I have found that Win32_TCPIPPrinterPort *WILL* work on my server. The
port will get created just fine, but the printer will not on the
server.

I am BRAND NEW to VBScript, my experience is limited, and I am learning
as I go along.

I'd like to know if I have to abandon this script and use the RK as
recommended previously, or if I can "fix" this to work properly...

Here is my script:

Code:
--------------------
Dim Computer, DriverName, DriverInf, IPAddress, PrinterHostName, PortName
Dim WMI, NewPort, NewDriver, NewPrinter
Dim ArgObj, var1
Dim strComputer, objWMIService, objPrinter
Set ArgObj = WScript.Arguments

var1 = ArgObj(0)

Computer = "."
DriverName = "HP Universal Printing PCL 6"
PrinterHostName = var1 & ".fabrikam.loc"
IPAddress = PrinterHostName
' END CALLOUT A

WScript.Echo "PrinterHostName: " & PrinterHostName

PortName = PrinterHostName
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate" _
& ",(LoadDriver)}!//" & Computer & "/root/cimv2")

Set NewPort = WMI.Get("Win32_TCPIPPrinterPort").SpawnInstance_
NewPort.HostAddress = IPAddress
NewPort.Name = PortName
NewPort.Protocol = 1
NewPort.SNMPEnabled = 1
NewPort.SNMPCommunity = "public"
NewPort.Put_
WScript.Echo "Created printer port: " & PortName

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objPrinter = objWMIService.Get("Win32_Printer").SpawnInstance_
objPrinter.DriverName = DriverName
objPrinter.PortName = PortName
objPrinter.DeviceID = var1
objPrinter.Location = var1
objPrinter.Network = True
objPrinter.Shared = True
objPrinter.ShareName = var1
objPrinter.Default = True
objPrinter.Put_
WScript.Echo "Created printer: " & var1
WScript.Echo " Using Driver: " & DriverName
WScript.Echo " Shared As: " & var1
WScript.Echo " On Port: " & PortName

--------------------


--
greggplatinum
------------------------------------------------------------------------
greggplatinum's Profile: http://forums.techarena.in/member.php?userid=27212
View this thread: http://forums.techarena.in/showthread.php?t=92376

http://forums.techarena.in

0 new messages