Solved

How to "uninstall" a printer using a logon / startup script

Posted on 2006-11-20
18
6,180 Views
Last Modified: 2012-08-13
Hi

I recently made some changes to some printers on our network, which involved the removal of one printer, the installation of a new one, and the renaming of the an existing one. Now when a user logs on, there's a list of four printers, two of which are redundant. It is possible to delete the redundant printers by adding a line to a log on script? I used the net script to map the printers, as below

Dim net
Set net = CreateObject("WScript.Network")
net.AddWindowsPrinterConnection "\\server\NRG_2500"

net.SetDefaultPrinter "\\server\NRG _2500"

0
Comment
Question by:Jason210
  • 9
  • 8
18 Comments
 
LVL 43

Assisted Solution

by:Steve Knight
Steve Knight earned 500 total points
Comment Utility
Actually it is potentially as simple as adding another line:

net.RemoveWindowsPrinterConnection "\\oldserver\NRG_2500"

or whatever

Some more examples here:

http://www.experts-exchange.com/Operating_Systems/Win2000/Q_21373245.html

0
 
LVL 11

Author Comment

by:Jason210
Comment Utility
Ok...thnx. I'll drop that line into the scripts, leave it there for a few weeks and see what happens.
0
 
LVL 43

Expert Comment

by:Steve Knight
Comment Utility
OK, give it a try and let us know, accept an answer when you're ready .... not chasing just 'cos I'm a few short of the 150k mark at all ;-)

It certainly works if the printers are previously installed from a server.  If they are locally installed ones then you run into issues such as the user not having admin rights to the workstation etc..

Good luck

Steve
0
 
LVL 11

Author Comment

by:Jason210
Comment Utility
Hi

A few more days to go yet so don't worry.

I added the line yesterday and will keep an eye open for results today, and post points as soon as I see the result.
0
 
LVL 11

Author Comment

by:Jason210
Comment Utility
Well, I added that line last week, and when I checked today the printers are still there, unfortunately.
0
 
LVL 43

Assisted Solution

by:Steve Knight
Steve Knight earned 500 total points
Comment Utility
Can I suggest you try it manually on one to see what is going on --  i.e. if you have a printer called \\server\oldprinter on a machine then add a RemoveConnetion to it's own little VBS script to see what it errorson if anything.  In fact are the printers installed as proper nework printers (printerx on servery) from a server or with a locally installed tcp/ip port?

Dim net
Set net = CreateObject("WScript.Network")
net.RemoveWindowsPrinterConnection "\\server\NRG_2500"

Steve
0
 
LVL 11

Author Comment

by:Jason210
Comment Utility
Hi & thnx for the reply

The printers are installed locally on tcp/ip ports
0
 
LVL 43

Expert Comment

by:Steve Knight
Comment Utility
In which case... do the users have admin rights?
0
 
LVL 11

Author Comment

by:Jason210
Comment Utility
of course not
0
Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

 
LVL 43

Assisted Solution

by:Steve Knight
Steve Knight earned 500 total points
Comment Utility
Or run it from startup script then I suppose if not actually... found some code here to do it.... will need the full printer name, i.e. HP Laserjet 4000N etc. as it isn't \\server\printer if it is locally installed...  if you ONLY want your new printers as maybe there are no local ones any more you could have this delete ALL local printers and then re-add your networked ones in your login script (just remove the where deviceid='xxxx' bit):

http://www.msfn.org/board/lofiversion/index.php/t82770.html

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer where DeviceID = 'ScriptedPrinter'") <-- Change ScriptedPrinted to the friendly name of the printer you want to delete

For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
0
 
LVL 11

Author Comment

by:Jason210
Comment Utility
Thanks....but I asked a user just now to see if they could delete a printer connection, and he could, so I don't think rights is an issue. Or??
0
 
LVL 43

Assisted Solution

by:Steve Knight
Steve Knight earned 500 total points
Comment Utility
Might not be a rights issue then in which case try the above in their login script.  The thing is if it is a locally installed printer rather than connecting to a server then the original commands just don't work, different stufff.

Steve
0
 
LVL 11

Author Comment

by:Jason210
Comment Utility
ok thnx...

I'm sorry, but I misunderstood you, probably because I have to translate everything to and from Swedish. The printers are locally installed on tcp/ip port installed on a server, so everythings is spooled on the server. The connections are indeed shown as "printerx on servery" (C2500 på servern in Swedish...lol).

Sorry about that.
0
 
LVL 43

Accepted Solution

by:
Steve Knight earned 500 total points
Comment Utility
No problem... someone did once teach me a few words of Swedish while I was in Goteburg but I don't think that would come in much useful here... it is fun finding your way around German / French / Japanese windows machines mind!

Anyway I'm surprised it doesn't work, fairly standard stuff.  What happens if you run the script manually as a user on one of these boxes.  Any errors?  I wonder if it is because the printer has been deleted, in which case it might be needed to add the printer back to the server again with the same name in order to delete it...
Steve

Another option is the old dll method:

i.e.

rundll32 printui.dll,PrintUIEntry /dn /n "your printer name" /q
or
rundll32 printui.dll,PrintUIEntry /dl /n "your printer name" /q

Once you have one that runs manually whether an exe as above or VBS then add it to your scripts.  All have worked for me in the past so not sure why it doesn't work for you.

rundll32 printui.dll,PrintUIEntry /?
Usage: rundll32 printui.dll,PrintUIEntry [options] [@commandfile]
   /a[file] binary file name
   /b[name] base printer name
   /c[name] unc machine name if the action is on a remote machine
   /dl delete local printer
   /dn delete network printer connection
   /dd delete printer driver
   /e display printing preferences
   /f[file] either inf file or output file
   /ga add per machine printer connections (the connection will be propagated to the user upon logon)
   /ge enum per machine printer connections
   /gd delete per machine printer connections (the connection will be deleted upon user logon)
   /h[arch] driver architecture one of the following, x86 | Itanium | x64
   /ia install printer driver using inf file
   /id install printer driver using add printer driver wizard
   /if install printer using inf file
   /ii install printer using add printer wizard with an inf file
   /il install printer using add printer wizard
   /in add network printer connection
   /j[provider] print provider name
   /k print test page to specified printer, cannot be combined with command when installing a printer
   /l[path] printer driver source path
   /m[model] printer driver model name
   /n[name] printer name
   /o display printer queue view
   /p display printer properties
   /q quiet mode, do not display error messages
   /r[port] port name
   /s display server properties
   /Ss Store printer settings into a file
   /Sr Restore printer settings from a file
   Store or restore printer settings option flags that must be placed at the end of command:
      2      PRINTER_INFO_2
      7      PRINTER_INFO_7
      c      Color Profile
      d      PrinterData
      s      Security descriptor
      g      Global DevMode
      m      Minimal settings
      u      User DevMode
      r      Resolve name conflicts
      f      Force name
      p      Resolve port
      i      Driver name conflict
   /u use the existing printer driver if it's already installed
   /t[#] zero based index page to start on
   /v[version] driver version one of the following, Windows 95, Windows 98, and Windows Millennium Edition | Windows NT 4.0 | Windows 2000, Windows XP and Windows Server 2003 | Windows XP and Windows Server 2003
   /w prompt the user for a driver if specified driver is not found in the inf
   /y set printer as the default
   /Xg get printer settings
   /Xs set printer settings
   /z do not auto share this printer
   /Y do not auto generate a printer name
   /K changes the meaning of /v and /h to accept 0,2,3, respectively for Windows x64 and Windows IA64 | Windows NT x86 | Windows 4.0
   /Z share this printer, can only be used with the /if option
   /? help this message
   @[file] command line argument file
   /Mw[message] show a warning message before committing the command
   /Mq[message] show a confirmation message before committing the command
   /W[flags] specifies flags and switches for the wizards (for APW & APDW)
      r      make the wizards to be restart-able from the last page
   /G[flags] specifies global flags and switches
      w      suppress setup driver warnings UI (super quiet mode)

Examples:
   Run server properties:
rundll32 printui.dll,PrintUIEntry /s /t1 /n\\machine
   Run printer properties:
rundll32 printui.dll,PrintUIEntry /p /n\\machine\printer
   Run add printer wizard localy:
rundll32 printui.dll,PrintUIEntry /il
   Run add printer wizard on \\machine:
rundll32 printui.dll,PrintUIEntry /il /c\\machine
   Run queue view:
rundll32 printui.dll,PrintUIEntry /o /n\\machine\printer
   Run inf install:
rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /f %windir%\inf\ntprint.inf /r "lpt1:" /m "AGFA-AccuSet v52.3"
   Run add printer wizard using inf:
rundll32 printui.dll,PrintUIEntry /ii /f %windir%\inf\ntprint.inf
   Add per machine printer connection (the connection will be propagated to the user upon logon):
rundll32 printui.dll,PrintUIEntry /ga /c\\machine /n\\machine\printer /j"LanMan Print Services"
   Delete per machine printer connection (the connection will be deleted upon user logon):
rundll32 printui.dll,PrintUIEntry /gd /c\\machine /n\\machine\printer
   Enumerate per machine printer connections:
rundll32 printui.dll,PrintUIEntry /ge /c\\machine
   Add printer driver using inf:
rundll32 printui.dll,PrintUIEntry /ia /c\\machine /m "AGFA-AccuSet v52.3" /h "x86" /v "Windows 2000, Windows XP and Windows Server 2003" /f %windir%\inf\ntprint.inf
   Add printer driver using inf:
rundll32 printui.dll,PrintUIEntry /ia /K /c\\machine /m "AGFA-AccuSet v52.3" /h "Windows NT x86" /v 3
   Remove printer driver:
rundll32 printui.dll,PrintUIEntry /dd /c\\machine /m "AGFA-AccuSet v52.3" /h "x86" /v "Windows 2000, Windows XP and Windows Server 2003"
   Remove printer driver:
rundll32 printui.dll,PrintUIEntry /dd /K /c\\machine /m "AGFA-AccuSet v52.3" /h "Windows NT x86" /v 3
   Set printer as default:
rundll32 printui.dll,PrintUIEntry /y /n "printer"
   Set printer comment:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" comment "My Cool Printer"
   Get printer settings:
rundll32 printui.dll,PrintUIEntry /Xg /n "printer"
   Get printer settings saving results in a file:
rundll32 printui.dll,PrintUIEntry /f "results.txt" /Xg /n "printer"
   Set printer settings command usage:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ?
   Store all printer settings into a file:
rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat"
   Restore all printer settings from a file:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat"
   Store printer information on level 2 into a file :
rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat" 2
   Restore  from a file printer security descriptor:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" s
   Restore  from a file printer global devmode and printer data:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" g d
   Restore  from a file minimum settings and resolve port name:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" m p
0
 
LVL 11

Author Comment

by:Jason210
Comment Utility
I never did figure out the problem...I just sent out memo to everyone instructing them to uninstall manually. It worked.!

I awarded the points because your answers seemed reasonable, and thanks for your efforts
0
 
LVL 43

Expert Comment

by:Steve Knight
Comment Utility
Thanks for the answer... hope it helped!

Steve
0
 
LVL 43

Expert Comment

by:Steve Knight
Comment Utility
Ahh as it happens looks like it didn't - we crossed posts there, thanks anyway then.
0
 

Expert Comment

by:navigato
Comment Utility
It's too bad - though I know a lot of people who have had trouble scripting the removal of printers esp. using the rundll32 method.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

FIPS stands for the Federal Information Processing Standardisation and FIPS 140-2 is a collection of standards that are generically associated with hardware and software cryptography. In most cases, people can refer to this as the method of encrypti…
Sometimes you might need to configure routing based not only on destination IP address, but also on a combination of destination IP address (or hostname) and destination port number. I will describe a method how to accomplish this with free tools. …
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now