The three scripts below allow you to save the current users Printer Connections (Print Mappings) to a text file, and later to restore those same Printer Connections by reading the text file. The scripts also save and restore the users choice of default printer.
This can be useful if you need to delete the users profile (reprofile) or delete and re-create a user account, or to copy Printer Connections between user accounts. (The text file is stored in %HOMESHARE% rather than %USERPROFILE% because reprofiling will normally delete everything in %USERPROFILE%.)
[PrintSave.cmd]
cscript PrintQueues.vbs >"%HOMESHARE%\myprinters.txt"
[PrintQueues.vbs]
Option Explicit
On Error Resume Next
Dim strDefaultPrinter,objWMIService,colInstalledPrinters, objPrinter
' 1. Get the name of the default Printer ###
strDefaultPrinter = DefaultPrinter
' 2. WMI query for current printer connections ###
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
' 3. Main Loop through printer collection ###
For Each objPrinter in colInstalledPrinters
If Left(objPrinter.Name, 2) = "\\" Then 'Work only on network printers
'Echo the printer name
If strDefaultPrinter = objPrinter.Name Then
Wscript.Echo objPrinter.Name & " DEFAULT"
Else Wscript.Echo objPrinter.Name
End If
End If 'End of check for network printers
Next 'End of the loop through the printer collection
'-----------------
' Functions
'-----------------
'Return the default printer
Function DefaultPrinter
Dim strComputer
Dim Result
strComputer = "."
Result = ""
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
For Each objPrinter in colInstalledPrinters
If objPrinter.Default = True Then
Result = objPrinter.Name
End If
Next
DefaultPrinter = Result
End Function
[PrintRestore.cmd]
@echo off
Setlocal
:: Restore printer drive mappings from myprinters.txt
set _vbs=%temp%\RestorePrinterConnections.vbs
Echo On Error resume Next > %_vbs%
Echo Dim WshNetwork >> %_vbs%
Echo Set WshNetwork = CreateObject("WScript.Network") >> %_vbs%
for /f "usebackq tokens=1,2" %%G in ("%HOMESHARE%\myprinters.txt") do call :map %%G %%H
cscript %_vbs%
Del %_vbs%
goto:eof
:map
Echo %1
Echo WshNetwork.AddWindowsPrinterConnection "%1" >> %_vbs%
if /i "%2"=="Default" echo WshNetwork.SetDefaultPrinter "%1" >> %_vbs%
Example
List the printer connections for the current user:
C:\> cscript PrintQueues.vbs
Save all network printer connections to the file %HOMESHARE%\myprinters.txt
C:\> PrintSave
Install a set of printer connections by reading the file %HOMESHARE%\myprinters.txt
C:\> PrintRestore
“Do you know the difference between education and experience? Education is when you read the fine print; experience is what you get when you don’t” ~ Pete Seeger
Related:
qchange.vbs - Re-assign network printer connections
PRINTBRM - Print queue Backup/Recovery