Unmap/remap network printers with a script without Admin privileges

Posted on 2014-04-26
Last Modified: 2014-05-10
We have to switch approximately 118 printers from one server to another. The printer names will remain the same. There are 200 users, who do not have Admin privileges on their machines, and are spread out on several floors and could be using a wide range of the 118 printers. We would like to make a switch for them as painless as possible with a single script that could be executed by each user.

Ideally I'd like a script to dynamically unmap a user's old devices then map the new ones. I know a .bat script with PrintUiEntry.dll will work to add or remove if you already know the device names. However I can't find a way to make a single script do this dynamically for each user without writing a VB executable, which they would not be able to run.

Any ideas?
Question by:bozworthy
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
  • +1
LVL 25

Expert Comment

by:Mohammed Khawaja
ID: 40025138
We did the same for users at work and we wrote a script.  I will post the script next week.
LVL 31

Expert Comment

by:Gareth Gudger
ID: 40025269
If you are using Server 2008 R2 or newer domain controllers you can easily do this with Group Policies.

See the screenshot. It's very easy to do. The user does not need admin rights. Its all automated.

GPO Printers
LVL 54

Expert Comment

ID: 40027740
And please keep in mind what admin privileges are needed for... NOT for mapping a printer BUT for installing the driver... and that has already happened. So remapping will need no admin rights.

Yes, I did that before.
Create Professional Looking Email Signatures

Create "Professional HTML Email Signatures" with ease.
7 Day Money Back Guarantee if not 100% Satisfied.
Affordable - Try it out for 7 Days Totally Risk Free.
Installers provided for over 45 Email clients.
Both Windows & MAC Supported.
Highly Recommended!


Author Comment

ID: 40032614
If understand this correctly it will work....but since we won't know which devices a user has mapped (they might have 5 of the 118 mapped) we would be forced to add all 118 printers to every user.  Or am I misunderstanding?
LVL 31

Expert Comment

by:Gareth Gudger
ID: 40033105
Rather than the "Create" one I have selected in the screenshot, you could do the "Update" one instead. That will only fix the ones they have.
LVL 25

Expert Comment

by:Mohammed Khawaja
ID: 40034788
From what you are telling me, the printers were moved and no where was it mentioned if new drivers were created or if the share names were changed.  What I would do is the following:
1. Have a script to interrogate all printers installed on user's pc
2. Check against a mapping file
3. Delete printer and installing the corresponding replacement one

Below is the script and the mapping file will contain a line with the old printer shared name, followed by ~ and finally the new shared printer name.

Option Explicit

Dim objNetwork, objPrinter, intDrive, intNetLetter

Dim fso, ts, ts2, sTemp, sTemp2, sPrt, sNewPrt

Dim WshNetwork, strComputer, objWMIService, colPrinters, sDefaultPrt

'Get the default Printer
strComputer = "."
Set objWMIService = GetObject ("winmgmts:\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMIService.ExecQuery ("Select * From Win32_Printer where Default = TRUE")

Set fso = CreateObject("Scripting.FileSystemObject")

For Each objPrinter in colPrinters
       sDefaultPrt = objPrinter.Sharename

'Get the currently mapped printers
Set objNetwork = CreateObject("WScript.Network")
Set objPrinter = objNetwork.EnumPrinterConnections
Set WshNetwork = CreateObject("WScript.Network")

Set ts = fso.CreateTextFile("c:\myprinters.txt")

For intDrive = 0 To (objPrinter.Count -1) Step 2

      intNetLetter = IntNetLetter +1

        ts.Writeline objPrinter.Item(intDrive +1)


'Find matching printers and remove them

Set ts = fso.OpenTextFile("c:\myprinters.txt", 1)

Do While Not ts.AtEndOfStream

      sTemp = ts.ReadLine

      SET ts2 = fso.OpenTextFile("\\servername\sharedname\prnmapping.txt", 1)

      Do While Not ts2.AtEndOfStream

            sTemp2 = ts2.ReadLine
            sPrt = Left(sTemp2, Instr(sTemp2, "~") - 1)
            sNewPrt = Mid(sTemp2, Instr(sTemp2, "~") + 1)

            If uCase(sTemp) = uCase(sPrt) Then
                  WshNetwork.RemovePrinterConnection  sPrt
                  WshNetWork.AddWindowsPrinterConnection sNewPrt
                  'Set as the default if matches the currently mapped default printer
                  If Instr(sPrt, sDefaultPrt)> 0 Then
                        WshNetwork.SetDefaultPrinter sNewPrt
                  End If
                  Exit Do
            End If



Accepted Solution

bozworthy earned 0 total points
ID: 40036378
Mohammed, the new print queues were set up on the new server with drivers. A user's mapping would change from \\olderserver\printer to \\newserver\printer.  I was testing a script much like above but the line WshNetWork.AddWindowsPrinterConnection sNewPrt did not add a device to my machine nor did WshNetwork.RemovePrinterConnection  sPrt remove one. Also, wouldn't a user need Admin to run that executable script?

We ended up putting the device list on a website where the user's could choose their device and run a .bat file with PrintUiEntry to add it. Then it was up to them to manually delete any old mappings.
LVL 54

Expert Comment

ID: 40040818
Ok fine. Then finalize this question :)

Author Closing Comment

ID: 40055662
Given the admin constraint and time concerns, this is what we ended up doing.
LVL 25

Expert Comment

by:Mohammed Khawaja
ID: 40056128
Our users never had admin rights and you do not need admin rights to connect to a printer.  From what I gathered, drivers were already on users PC since you moved printers from one server to another, all that would happen is the OS would connect to the printer using already installed drivers.

Featured Post

Enroll in May's Course of the Month

May’s Course of the Month is now available! Experts Exchange’s Premium Members and Team Accounts have access to a complimentary course each month as part of their membership—an extra way to increase training and boost professional development.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When you start your Windows 10 PC and got an "Operating system not found" error or just saw  "Auto repair for startup" or a blinking cursor with black screen. A loop for Auto repair will start but fix nothing.  You will be panic as there are no back…
Possible fixes for Windows 7 and Windows Server 2008 updating problem. Solutions mentioned are from Microsoft themselves. I started a case with them from our Microsoft Silver Partner option to open a case and get direct support from Microsoft. If s…
The viewer will learn how to successfully create a multiboot device using the SARDU utility on Windows 7. Start the SARDU utility: Change the image directory to wherever you store your ISOs, this will prevent you from having 2 copies of an ISO wit…
The viewer will learn how to successfully download and install the SARDU utility on Windows 7, without downloading adware.

738 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