Unfortunately, without Admin Rights it doesn't work yet...however if you have Admin Rights on the workstation it does work with a change to the Group Policy.

Group Policy: On a workstation running MS Vista, Start->Run->type in gpmc.msc to load the Group Policy Object Editor. Then edit the domain policy->Computer Configuration->Windows Settings->Security Options and change the User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode to Elevate without prompting.

Then download the Elevate.cmd & Elevate.vbs from Microsoft Vista PowerToys.

 Code:
FUNCTION ADDPRINTER($PORT,$PRINTERTYPE,OPTIONAL $DRIVERINF,$DRIVERNAME,$UNVNAME,$PRINTERDESC,$PORTNUMBERKEY,$PRINTERKEY,$PRINTERDLL,$PROTOCOLKEY,$QUEUEKEY,$SNMPENABLED,$REMOTEPC,$DEFAULT)
	DIM $QUITLOOP,$IPPRINTERKEY,$PRINTERCMD
  	
	$ADDPRINTER=0
	$ADDQUEUE=0
  	$PRINTERPROCINSTALL="NO"
			
	? "Starting Add Printer..." ?		
	
	? "PORT: " $PORT
	? "PRINTERTYPE: " $PRINTERTYPE
	? "DRIVERINF: " $DRIVERINF
	? "DRIVERNAME: " $DRIVERNAME
	? "UNIVERSALNAME: " $UNVNAME
	? "PRINTERDESC: " $PRINTERDESC
	? "PORTNUMBERKEY: " $PORTNUMBERKEY
	? "PRINTERKEY: " $PRINTERKEY
	? "PRINTERDLL: " $PRINTERDLL
	? "PROTOCOLKEY: " $PROTOCOLKEY
	? "QUEUEKEY: " $QUEUEKEY
	? "SNMPENABLED: " $SNMPENABLED
	? "REMOTEPC: " $REMOTEPC
	? "DEFAULT: " $DEFAULT ?

	IF NOT LEFT($PORT,2)="\\"
		
		IF $DRIVERINF=""
			? "Using Built-In Windows Drivers"
			$DRIVERINF="%WINDIR%\INF\NTPRINT.INF"
		ENDIF
		
		IF NOT EXIST($DRIVERINF)
			? "INF File Does Not Exist!"
			EXIT -3
		ENDIF
		
		? "Parsing INF File..."
		SHELL '%COMSPEC% /C TYPE "$DRIVERINF">%TEMP%\ADDPRINTER.TXT'
		
		IF OPEN(3,"%TEMP%\ADDPRINTER.TXT",0)=0
			$QUITLOOP=0
			
			IF $VISTA32="YES" OR $VISTA64="YES"
				WHILE @ERROR=0 AND $QUITLOOP=0
					$LINE=READLINE(3)
					IF $UNVNAME=""
						$QUITLOOP=INSTR($LINE,$PRINTERTYPE)
					ELSE
						$QUITLOOP=INSTR($LINE,$UNVNAME)
					ENDIF
				LOOP
			ELSE
				WHILE @ERROR=0 AND $QUITLOOP=0
					$LINE=READLINE(3)
					$QUITLOOP=INSTR($LINE,$PRINTERTYPE)
				LOOP
			ENDIF

			$=CLOSE(3)
			
			IF $QUITLOOP=0
				EXIT -2
			ENDIF
			
		ELSE
			EXIT -3
		ENDIF
	ENDIF

	IF $PRINTERDESC=""
		$PRINTERDESC=$DRIVERNAME
	ENDIF

	IF $REMOTEPC=""
		$REMOTEPC='\\'+ @WKSTA
	ELSE
		IF NOT LEFT($REMOTEPC,2)="\\"
			$REMOTEPC='\\' + $REMOTEPC
		ENDIF
  	ENDIF

	SELECT 
    		CASE LEFT($PORT,2)="\\"
			$PRINTSERVER=1
			$PRINTERDESC=$PORT
		CASE INSTR($PORT,".")
			$REGFILE="C:\NETWORK\PRINTERWIZ.REG"
			IF EXIST ($REGFILE)
				DEL ($REGFILE)
			ENDIF

			
			OPEN(3,$REGFILE,5)
			$=WRITELINE(3,"Windows Registry Editor Version 5.00"+@CRLF)
			$=WRITELINE(3,@CRLF)
			$=WRITELINE(3,"[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\"+$PORT+"]"+@CRLF)
			CLOSE(3)

			? "Removing Existing Port Keys..."
			IF $VISTA32="YES" OR $VISTA64="YES"
				SHELL '%COMSPEC% /C C:\NETWORK\ELEVATE.CMD REGEDIT /S $REGFILE'
			ELSE
				SHELL '%COMSPEC% /C REGEDIT /S $REGFILE'
			ENDIF
		
			SLEEP 3

			? "Done Removing Existing Port Keys..."
			IF EXIST ($REGFILE)
				DEL ($REGFILE)
			ENDIF
			
			SLEEP 3

			? "Creating New Registry File..."
			IF $VISTA32="YES" OR $VISTA64="YES"
				$IPPRINTERKEY='$REMOTEPC\$HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\PRINT\MONITORS\STANDARD TCP/IP PORT\PORTS\' +$PORT
				
				? "Creating Print Port Registry File For Vista"
				OPEN(3,$REGFILE,5)
				$=WRITELINE(3,"Windows Registry Editor Version 5.00"+@CRLF)
				$=WRITELINE(3,@CRLF)
				$=WRITELINE(3,"[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\"+$PORT+"]"+@CRLF)
				$=WRITELINE(3,CHR(34)+"Double Spool"+CHR(34)+"=dword:00000001"+@CRLF)						
				$=WRITELINE(3,CHR(34)+"HostName"+CHR(34)+"="+CHR(34)+$PORT+CHR(34)+@CRLF)
				$=WRITELINE(3,CHR(34)+"HWAddress"+CHR(34)+"="+CHR(34)+CHR(34)+@CRLF)
				$=WRITELINE(3,CHR(34)+"IPAddress"+CHR(34)+"="+CHR(34)+CHR(34)+@CRLF)
				$=WRITELINE(3,CHR(34)+"PortMonMibPortIndex"+CHR(34)+"=dword:00000000"+@CRLF)
				$=WRITELINE(3,CHR(34)+"PortNumber"+CHR(34)+"=dword:00000203"+@CRLF)
				$=WRITELINE(3,CHR(34)+"Protocol"+CHR(34)+"=dword:00000002"+@CRLF)
				$=WRITELINE(3,CHR(34)+"Queue"+CHR(34)+"="+CHR(34)+"RAW"+CHR(34)+@CRLF)
				$=WRITELINE(3,CHR(34)+"SNMP Community"+CHR(34)+"="+CHR(34)+"public"+CHR(34)+@CRLF)
				$=WRITELINE(3,CHR(34)+"SNMP Enabled"+CHR(34)+"=dword:00000001"+@CRLF)
				$=WRITELINE(3,CHR(34)+"SNMP Index"+CHR(34)+"=dword:00000001"+@CRLF)
				$=WRITELINE(3,CHR(34)+"Version"+CHR(34)+"=dword:00000002"+@CRLF)
				
				? "Creating Printer Processor Registry File For Vista"
				IF $PRINTERKEY<>""
					? "PRINTERKEY: " $PRINTERKEY
					
					IF $OSBIT="64 Bit"
						$PRINTPROCOS="WINDOWS x64"
						$PRINTPROCREGKEY='$REMOTEPC\$HKLM\$SYSCCS\CONTROL\PRINT\ENVIRONMENTS\WINDOWS x64\PRINT PROCESSORS\'+$PRINTERKEY
					ELSE
						$PRINTPROCOS="WINDOWS NT x86"
						$PRINTPROCREGKEY='$REMOTEPC\$HKLM\$SYSCCS\CONTROL\PRINT\ENVIRONMENTS\WINDOWS NT x86\PRINT PROCESSORS\'+$PRINTERKEY
					ENDIF
					
					$=WRITELINE(3,@CRLF)
					$=WRITELINE(3,"["+$HKLM+"\SYSTEM\CurrentControlSet\Control\Print\Environments\"+$PRINTPROCOS+"\Print Processors\"+$PRINTERKEY+"]"+@CRLF)
					$=WRITELINE(3,CHR(34)+"Driver"+CHR(34)+"="+CHR(34)+$PRINTERDLL+CHR(34)+@CRLF)
					;$PRINTERPROCINSTALL="YES"
					;$POPUPALERTMESSAGE1=""
					;$POPUPALERTMESSAGE2=""
					;$POPUPALERTMESSAGE3=""
					;$POPUPALERTMESSAGE4=""
					;$POPUPALERTMESSAGE5=""
					;$FORMMAIN.MOUSEPOINTER=0
					;ALERTMESSAGES()
				ENDIF

				? "Writing Registry File..."
				CLOSE(3)
				? "Closing Registry File..."
			ELSE
				$IPPRINTERKEY='$REMOTEPC\$HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\PRINT\MONITORS\STANDARD TCP/IP PORT\PORTS\IP_' +$PORT

				? "Creating Print Port Registry File For XP"
				OPEN(3,$REGFILE,5)
				$=WRITELINE(3,"Windows Registry Editor Version 5.00"+@CRLF)
				$=WRITELINE(3,@CRLF)
				$=WRITELINE(3,"[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_"+$PORT+"]"+@CRLF)
				$=WRITELINE(3,CHR(34)+"Double Spool"+CHR(34)+"=dword:00000001"+@CRLF)						
				$=WRITELINE(3,CHR(34)+"HostName"+CHR(34)+"="+CHR(34)+CHR(34)+@CRLF)
				$=WRITELINE(3,CHR(34)+"HWAddress"+CHR(34)+"="+CHR(34)+CHR(34)+@CRLF)
				$=WRITELINE(3,CHR(34)+"IPAddress"+CHR(34)+"="+CHR(34)+$PORT+CHR(34)+@CRLF)
				$=WRITELINE(3,CHR(34)+"PortNumber"+CHR(34)+"=dword:00000203"+@CRLF)
				$=WRITELINE(3,CHR(34)+"Protocol"+CHR(34)+"=dword:00000002"+@CRLF)
				$=WRITELINE(3,CHR(34)+"Queue"+CHR(34)+"="+CHR(34)+"RAW"+CHR(34)+@CRLF)
				$=WRITELINE(3,CHR(34)+"SNMP Community"+CHR(34)+"="+CHR(34)+"public"+CHR(34)+@CRLF)
				$=WRITELINE(3,CHR(34)+"SNMP Enabled"+CHR(34)+"=dword:00000001"+@CRLF)
				$=WRITELINE(3,CHR(34)+"SNMP Index"+CHR(34)+"=dword:00000001"+@CRLF)
				$=WRITELINE(3,CHR(34)+"Version"+CHR(34)+"=dword:00000001"+@CRLF)
			
				? "Creating Printer Processor Registry File For XP"
				IF $PRINTERKEY<>""
					? "PRINTERKEY: " $PRINTERKEY

					IF $OSBIT="64 Bit"
						$PRINTPROCOS="WINDOWS x64"
						$PRINTPROCREGKEY='$REMOTEPC\$HKLM\$SYSCCS\CONTROL\PRINT\ENVIRONMENTS\WINDOWS x64\PRINT PROCESSORS\'+$PRINTERKEY
					ELSE
						$PRINTPROCOS="WINDOWS NT x86"
						$PRINTPROCREGKEY='$REMOTEPC\$HKLM\$SYSCCS\CONTROL\PRINT\ENVIRONMENTS\WINDOWS NT x86\PRINT PROCESSORS\'+$PRINTERKEY
					ENDIF
					
					$=WRITELINE(3,@CRLF)
					$=WRITELINE(3,"["+$HKLM+"\SYSTEM\CurrentControlSet\Control\Print\Environments\"+$PRINTPROCOS+"\Print Processors\"+$PRINTERKEY+"]"+@CRLF)
					$=WRITELINE(3,CHR(34)+"Driver"+CHR(34)+"="+CHR(34)+$PRINTERDLL+CHR(34)+@CRLF)
					;$PRINTERPROCINSTALL="YES"
					;$POPUPALERTMESSAGE1=""
					;$POPUPALERTMESSAGE2=""
					;$POPUPALERTMESSAGE3=""
					;$POPUPALERTMESSAGE4=""
					;$POPUPALERTMESSAGE5=""
					;$FORMMAIN.MOUSEPOINTER=0
					;ALERTMESSAGES()
				ENDIF

				? "Writing Registry File..."
				CLOSE(3)
				? "Closing Registry File..."
			ENDIF

			? "IPPRINTERKEY: " $IPPRINTERKEY
		
			? "Installing New Printer Port..."
			IF $VISTA32="YES" OR $VISTA64="YES"
				SHELL '%COMSPEC% /C C:\NETWORK\ELEVATE.CMD REGEDIT /S $REGFILE'
			ELSE
				SHELL '%COMSPEC% /C REGEDIT /S $REGFILE'
			ENDIF

			$OBJECTS=GETOBJECT("WINMGMTS:{IMPERSONATIONLEVEL=IMPERSONATE}!"+$REMOTEPC+"\ROOT\CIMV2")

			IF NOT @ERROR=0
				EXIT -4
			ENDIF

			$SERVICES=$OBJECTS.EXECQUERY('Select * from Win32_Service WHERE Name = "Spooler"')
      			
			FOR EACH $SPOOLER IN $SERVICES
				IF $VISTA32="YES" OR $VISTA64="YES"
					SHELL '%COMSPEC% /C C:\NETWORK\ELEVATE.CMD NET STOP "Print Spooler" >NUL'
				ELSE
					$=EXECUTE('$$=$$SPOOLER.STOPSERVICE()')
				ENDIF
			NEXT
	 		
			SLEEP 3
			
			FOR EACH $SPOOLER IN $SERVICES
				IF $VISTA32="YES" OR $VISTA64="YES"
					SHELL '%COMSPEC% /C C:\NETWORK\ELEVATE.CMD NET START "Print Spooler" >NUL'
				ELSE
					$=EXECUTE('$$=$$SPOOLER.STARTSERVICE()')
				ENDIF
			NEXT

			SLEEP 3

			IF $VISTA32="YES" OR $VISTA64="YES"
				$PORT='$PORT'	
			ELSE
				$PORT='IP_$PORT'
			ENDIF

		CASE UCASE(LEFT($PORT,3))="LPT" OR UCASE(LEFT($PORT,3))="COM"
			IF NOT RIGHT($PORT,1)=":"
			        $PORT=$PORT+":"
			ENDIF

			IF NOT VAL(LEFT(RIGHT($PORT,2),1))>=1
				EXIT -1 
			ENDIF

		CASE UCASE(LEFT($PORT,4))="FILE"
			IF NOT RIGHT($PORT,1)=":"
				$PORT=$PORT+":"
			ENDIF

		CASE 1
			EXIT -1
	ENDSELECT

	? "PORT: " $PORT
	? "PRINTERTYPE: " $PRINTERTYPE
	? "DRIVERINF: " $DRIVERINF
	? "DRIVERNAME: " $DRIVERNAME
	? "PRINTERDESC: " $PRINTERDESC
	? "PORTNUMBERKEY: " $PORTNUMBERKEY
	? "PRINTERKEY: " $PRINTERKEY
	? "PRINTERDLL: " $PRINTERDLL
	? "PROTOCOLKEY: " $PROTOCOLKEY
	? "QUEUEKEY: " $QUEUEKEY
	? "SNMPENABLED: " $SNMPENABLED
	? "REMOTEPC: " $REMOTEPC
	? "DEFAULT: " $DEFAULT
	
	IF NOT $PRINTSERVER=1
		$PRINTERCMD='RUNDLL32 PRINTUI.DLL,PrintUIEntry /if /b "$PRINTERDESC" /c "$REMOTEPC" /f "$DRIVERINF" /r "$PORT" /m "$PRINTERTYPE" /z'
		
		? "PRINTERCMD: " $PRINTERCMD
		IF $VISTA32="YES" OR $VISTA64="YES"
			SHELL '%COMSPEC% /C C:\NETWORK\ELEVATE.CMD $PRINTERCMD'
		ELSE
			SHELL $PRINTERCMD
		ENDIF
		
	ELSE
		IF NOT ADDPRINTERCONNECTION($PORT)=0
			EXIT @ERROR
		ENDIF
	ENDIF

	IF $DEFAULT=1
		IF NOT SETDEFAULTPRINTER($PRINTERDESC)=0
			EXIT @ERROR
		ENDIF
	ENDIF

	$ADDPRINTER=1

	? "Done Removing Existing Port Keys..."
	IF EXIST ($REGFILE)
		DEL ($REGFILE)
	ENDIF
	
	MESSAGESTATUS("Finishing Installing Printer - Select Another Printer Or Quit",BLUE)

	$FORMMAIN.MOUSEPOINTER=0
ENDFUNCTION



Edited by KIXKicks (2007-08-15 09:08 PM)