• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1676
  • Last Modified:

Unmap/remap network printers with a script without Admin privileges

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?
0
bozworthy
Asked:
bozworthy
  • 3
  • 3
  • 2
  • +1
1 Solution
 
Mohammed KhawajaManager - Infrastructure: Information TechnologyCommented:
We did the same for users at work and we wrote a script.  I will post the script next week.
0
 
Gareth GudgerCommented:
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
0
 
McKnifeCommented:
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.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
bozworthyAuthor Commented:
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?
0
 
Gareth GudgerCommented:
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.
0
 
Mohammed KhawajaManager - Infrastructure: Information TechnologyCommented:
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
Next

'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)

Next

'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
       Loop

       ts2.close
Loop

Wscript.Quit(1)
0
 
bozworthyAuthor Commented:
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.
0
 
McKnifeCommented:
Ok fine. Then finalize this question :)
0
 
bozworthyAuthor Commented:
Given the admin constraint and time concerns, this is what we ended up doing.
0
 
Mohammed KhawajaManager - Infrastructure: Information TechnologyCommented:
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.
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

  • 3
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now