Here's the complete script I'm playing with:

Code:

COLOR w+/b

break on

$array=printerlist()

? "Error: " + @error
;? "Number of printers: " + ubound($array) + 1
? "Number of Printers: " + (val(ubound($array)) + 1)

for each $printer in $array

? $printer

next

;if delprinterconnection($printer) = 0
; ? "Deleted printers!"
;else
; ? "Unable to remove printers!"
;endif

;if addprinterconnection("\\Calvin\Canon") = 0
; ? "Added printer \\Calvin\Canon"
;else
; ? "ERROR: Unable to add printer \\Calvin\Canon!"
;endif

;if setdefaultprinter("\\Calvin\Canon") = 0
; ? "Default printer is now set to \\Calvin\Canon"
;else
; ? "ERROR: Unable to set a default printer!"
;endif

EXIT

Function Printerlist(optional $remotepc,optional $displaymode)

dim $service,$printer,$printers,$printerdesc

if $remotepc=""

$remotepc='\\'+ @wksta

else

if not left($remotepc,2)="\\"

$remotepc='\\' + $remotepc

endif

endif

$Service=GetObject("winmgmts:{impersonationLevel=impersonate}!" + $remotepc +

"\root\cimv2")

; if not @error=0

; exit @error

; endif

cerror @error " " @serror

$Printers=$service.execquery ('select * from Win32_Printer')

for each $printer in $printers

select

case $displaymode=1

if $printerdesc=""

$printerdesc=$printer.name + "," + $printer.portname

else

$printerdesc=$printerdesc + "|" + $printer.name + "," + $printer.portname

endif

case $displaymode=0

if $printerdesc=""

$printerdesc=$printer.name

else

$printerdesc=$printerdesc + "|" + $printer.name

endif

endselect

next

$printerlist=split($printerdesc,"|")

endfunction

Function Cerror()
exit Iif(@error<0,VAL("&"+Right(DecToHex(@error),4)),@error)
Endfunction