#143295 - 2005-07-09 01:10 AM
Printer and Print Driver Removal Script
|
Kdyer
KiX Supporter
   
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
|
Got the following Script to work, but needs to be run twice to remove the drivers:
Code:
cls break on dim $priReg,$i,$DriverKey,$Printers,$rc,$objServer,objService,$
$DriverKey='HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-3' $Printers='HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices'
?'Before continuing, this process will remove all network printers and drivers' ?'Press CTRL+BREAK to stop now..' ?'Press any other key to continue' ? get $
?'List Printers found..' ;Delete Printers $i=0 DO IF '\\'=LEFT($x,2) ; -- ONLY NETWORK PRINTERS $priReg=$priReg+$x ENDIF $x=ENUMVALUE($Printers,$i) IF '\\'=LEFT($x,2) ?$x $rc=DELVALUE('HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices',$x) $rc=DELVALUE('HKCU\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts',$x) SLEEP '0.5' ENDIF $i=$i+1 UNTIL @error
??'Deleting Printers' DelPrinterConnections
$objServer=GetObject('WinNT://.,computer') $objService=$objServer.GetObject('Service','spooler')
??'Stopping the print spooler' $objService.Stop SLEEP 2
??'Listing Drivers' ;Delete drivers $i=0 DO $x=ENUMkey($DriverKey,$i) IF 'HP'=LEFT($x,2) AND NOT INSTR($x,'Mobile') ?$x SLEEP 1 ENDIF $i=$i+1 UNTIL @error
??'Removing Drivers' ;Delete drivers $i=0 DO $x=ENUMkey($DriverKey,$i) IF 'HP'=LEFT($x,2) PDRIVERREMOVE(,$x) SLEEP 1 ENDIF $i=$i+1 UNTIL @error
SLEEP 2
??'Starting the print spooler' $objService.Start
??'Process is complete, Press a key..' $objServer=0 $objService=0 get $ ;ActiveTouch ;CutePDF ;Image Writer ;Acrobat ;RightFAX ;Generator
; FUNCTION PDRIVERREMOVE() ; ; ACTION Remove Printer Drivers from a system ; ; AUTHOR Kent Dyer (leptonator@hotmail.com) ; ; CONTRIBUTORS ; ; VERSION 1.1 ; ; DATE CREATED 29-June-2004 ; ; DATE MODIFIED 24-May-2005 ; ; KIXTART 4.02 ; ; SYNTAX PdriverRemove() ; ; PARAMETERS ; wksta ; Workstation Name ; pdriver ; Print Driver Name ; ; DEPENDENCIES None ; ; RETURNS: Nothing ; ; REMARKS This is to remove print drivers by Microsoft Tech Article - 135406. ; http://support.microsoft.com/?id=135406 ; This can be run locally using a login script, only written for 2k/XP/2k3 ; If run using Login Script for example, you should remove the printers first ; Since this goes into HKLM for the Registry, and %WINDIR%\SYSTEM32, you will need ; appropriate priveleges. However, this can also be run as a remote Admin Script. ; ; EXAMPLEs ; PdriverRemove(,"HP LASERJET 4 PLUS") ; Remove HP LASERJET 4 PLUS from local Workstation ; PdriverRemove() ; Remove all Print Drivers from the system ; ; REMOVE PRINT DRIVERS FROM COMPUTERS ON THE DOMAIN ; DIM $container,$computer,$ ; ?'Checking Domain computers now...' ; $container=GetObject('WinNT://'+@ldomain) ; $container.filter='Computer', '' ; FOR EACH $computer IN $container ; $computern=$computer.name ; ?$computern ; SHELL '%COMSPEC% /C PING -n 1 '+$computern ; IF @error=0 ; PDRIVERREMOVE($srv) ; ENDIF ; NEXT ; ?'PROCESS IS COMPLETE.. PRESS A KEY' ; GET $ ; KIXTART BBS http://www.kixtart.org/ubbthreads/showflat.php?Cat=&Number=139441
FUNCTION PDRIVERREMOVE(OPTIONAL $wksta, OPTIONAL $pdriver) DIM $key,$keyname,$index,$fl,$rc,$drv IF NOT $wksta $wksta='\\'+@wksta+'\' ELSE $wksta='\\'+$wksta+'\' ENDIF $key=$wksta+'HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-3\' IF $pdriver<>'' $index=0 DO $keyname=ENUMKEY($key,$index) IF INSTR($keyname,$pdriver) $drv=READVALUE($key+$keyname,'Data File') FOR EACH $fl IN SPLIT(READVALUE($key+$keyname,'Dependent Files'),'|') IF EXIST($fl) DEL $wksta+'admin$$\system32\spool\drivers\w32x86\3\'+$fl ENDIF NEXT $rc=DELTREE($key+$keyname) ; -- AT THIS POINT, you should probably either restart the client or the PRINT SPOOLER ENDIF $index=$index+1 UNTIL LEN($keyname)=0 ELSE ; -- DELETE ALL PRINT DRIVERS $index=0 DO $keyname=ENUMKEY($key,$index) $drv=READVALUE($key+$keyname,'Data File') FOR EACH $fl IN SPLIT(READVALUE($key+$keyname,'Dependent Files'),'|') IF EXIST($fl) DEL $wksta+'admin$$\system32\spool\drivers\w32x86\3\'+$fl ENDIF NEXT $rc=DELTREE($key+$keyname) ; -- AT THIS POINT, you should probably either restart the client or the PRINT SPOOLER $index=$index+1 UNTIL LEN($keyname)=0 ENDIF ENDFUNCTION
; -- Thanks Lonkero! function DelPrinterConnections() dim $c,$bk,$conn $c=0 $bk='HKCU\Printers\Connections' $conn=enumkey($bk,$counter) while @error=0 $c=$c+1 $conn=delkey($bk+'\'+$conn) $conn=enumkey($bk,$counter) loop endfunction
Thanks for any insight.
Kent
|
|
Top
|
|
|
|
#143298 - 2005-07-23 04:55 AM
Re: Printer and Print Driver Removal Script
|
Kdyer
KiX Supporter
   
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
|
Quote:
eh... run twice? you also got driver remove udf and the script before it does something as well...
as far as I remember, removing printer driver is matter of some 2-3 registry deletions and that's it.
So.. Lonk - Do you know what keys are required for the drivers? I don't want to nuke Acrobat, RightFAX, drivers etc.
Kent
|
|
Top
|
|
|
|
Moderator: Glenn Barnas, NTDOC, Arend_, Jochen, Radimus, Allen, ShaneEP, Ruud van Velsen, Mart
|
1 registered
(Allen)
and 1607 anonymous users online.
|
|
|