Printer Migration for Clients and Windows 2003 Server
September 29th, 2008Migrating Printers from One server to the other can be a harmless process and here’s how!
First download “Windows Print Migrator 3.1″ usually found here if not google it
Open the printer migrator on your Old server ( The one you wish to transfer the printers from ) and Select the Action Menu then Backup
This will backup all your printers drivers , shares and names etc to a cab file
Open the printer migrator on your new server , and Action Menu then Restore. This now replicates the printer setup you had on your old server. All that needs to happen now is the clients need to readd the printers using the new server. This can be automated with this script saved as a .vbs and entered under a group policy for the OU
‘——————–8<———————-
‘ put in the server names here (keep the quotes!)
MovePrinters “oldserver”, “netservername”
‘ *********************************************
‘ Move printers to new server
‘ *********************************************
Sub MovePrinters(OldServer, NewServer)
‘ Loops through all network printers and moves all printers
‘ on “OldServer” to the same printername on “NewServer”.
dim WshNetwork, oPrinters, i, PrinterPath, DefaultPrinter, PrinterList
‘ Check that WSH version is new enough:
If CDbl(Replace(wscript.version,”.”,”,”)) < CDbl(5.6) Then
MsgBox “Automatic printer migration is not available for” & _
” this computer.” & vbCrLf & _
“Please migrate printers manually.” & vbCrLf & _
“The new printer server name is “”" & NewServer & “”"”, _
vbOKOnly + vbCritical, “Windows Scripting Host is too old”
wscript.quit 1
End If
Set WshNetwork = WScript.CreateObject(”WScript.Network”)
Set PrinterList = CreateObject(”Scripting.Dictionary”)
‘ Get the default printer before we start deleting:
DefaultPrinter = GetDefaultPrinter
‘ Get a list of printers to work with:
‘ (We cannot modify the collection while looping through it)
Set oPrinters = WshNetwork.EnumPrinterConnections
For i = 1 to oPrinters.Count Step 2
PrinterList.Add oPrinters.Item(i), “x”
Next ‘ i
‘ Loop through the printer list and migrate mathching ones:
For Each PrinterPath In PrinterList.Keys
If StrComp(ServerName(PrinterPath), OldServer, 1) = 0 Then
WshNetwork.RemovePrinterConnection PrinterPath, True, True
On Error Resume next
WshNetwork.AddWindowsPrinterConnection “\\” & NewServer & “\” & _
ShareName(PrinterPath)
‘If Err.Number = -2147023095 Then
‘ MsgBox “The printer “”" & ShareName(PrinterPath) & _
‘ “”" does not exist on server “”" & NewServer & “”".” & vbCrLf & _
‘ “The printer has been removed.”, vbOKonly + vbExclamation, _
‘ “Missing printer”
‘End If
On Error goto 0
End If
Next
‘Set the default printer:
If ServerName(DefaultPrinter) = OldServer Then
On Error Resume Next
WshNetwork.SetDefaultPrinter “\\” & NewServer & “\” & _
ShareName(DefaultPrinter)
‘If Err.Number = -2147352567 Then
‘MsgBox “Your default printer did not exist, and has been deleted.”, _
‘ vbOKonly + vbInformation, “Invalid default printer”
‘End If
On Error goto 0
End If
End Sub ‘ MovePrinters
Function GetDefaultPrinter()
‘ Returns the UNC path to the current default printer
Dim oShell, sRegVal, sDefault
Set oShell = CreateObject(”WScript.Shell”)
sRegVal = _
“HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device”
sDefault = “”
On Error Resume Next
sDefault = oShell.RegRead(sRegVal)
sDefault = Left(sDefault ,InStr(sDefault, “,”) - 1)
On Error Goto 0
GetDefaultPrinter = sDefault
End Function
Function ServerName(sPrinterPath)
Dim aPrinterPath
ServerName = “”
If Left(sPrinterPath, 2) = “\\” Then
aPrinterPath = Split(sPrinterPath, “\”)
ServerName = aPrinterPath(2)
End If
End Function
Function ShareName(sPrinterPath)
Dim aPrinterPath
ShareName = “”
If Left(sPrinterPath, 2) = “\\” Then
aPrinterPath = Split(sPrinterPath, “\”)
ShareName = aPrinterPath(3)
End If
End Function
‘——————–8<———————-



