Break ON
$gNull=SetOption("Explicit","ON")
$gNull=SetOption("ASCII","ON")
$gNull=SetOption("WrapAtEOL","ON")
Global $sLogFilePath
Dim $sDelimiterDim $sOldServer,$sNewServer
Dim $sOldPrefix,$sNewPrefix,$sNulPrefix
Dim $sDefaultPrinterKey,$sDefaultPrinterEntry,$sPrintersDim $iIndex
Dim $sPrinterKey,$sPrinterServer,$sPrinterShare
Dim $sPrintersToMove,$sPrintersToAddDim $sDefaultPrinter
; Array seperator
$sDelimiter="|"
; Log file path - set to null to disable logging to a file.
$sLogFilePath=@HOMESHR+"\"+"PrinterMove.log"
; Print server definitions.
$sOldServer="OLDSERVERNAME"$sNewServer="NEWSERVERNAME"
; Printer registry keys
$sDefaultPrinterKey="HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows"
$sDefaultPrinterEntry="Device"
$sPrinters="HKCU\Printers\Connections"
; Get default printer information
$sDefaultPrinter=Split(ReadValue($sDefaultPrinterKey,$sDefaultPrinterEntry),",")[0]
$sPrinterServer=Split($sDefaultPrinter,"\")[2]
$sDefaultPrinter=Split($sDefaultPrinter,"\")[3] $iIndex=0
$sPrinterKey=EnumKey($sPrinters,$iIndex)
While Not @ERROR $sPrinterServer=Split($sPrinterKey,",")[2]
$sPrinterShare=Split($sPrinterKey,",")[3]
Select
Case $sPrinterServer=$sNewServer
; No action required
Case $sPrinterServer=$sOldServer
$sPrintersToMove=$sPrintersToMove+$sDelimiter+$sPrinterShare
Case "UnknownPrintServer"
udfLog("WARNING: Print server "+$sPrinterServer+" not recognised for printer "+$sPrinterName)
EndSelect $iIndex=$iIndex+1 $sPrinterKey=EnumKey($sPrinters,$iIndex)
Loop
; Delete printers being moved.
For Each $sPrinterShare In Split($sPrintersToMove,$sDelimiter)
If $sPrinterShare
If DelPrinterConnection("\\"+$sOldServer+"\"+$sPrinterShare)
udfLog("Error "+@ERROR+" deleting printer "+"\\"+$sOldServer+"\"+$sPrinterShare)
Else udfLog("Printer "+"\\"+$sOldServer+"\"+$sPrinterShare+" deleted OK")
EndIf
EndIf
Next
; Add printers at new destination.
For Each $sPrinterShare In Split($sPrintersToMove,$sDelimiter)
If $sPrinterShare
If AddPrinterConnection("\\"+$sNewServer+"\"+$sPrinterShare)
udfLog("Error "+@ERROR+" connecting printer \\"+$sNewServer+"\"+$sPrinterShare)
Else
udfLog("Printer \\"+$sNewServer+"\"+$sPrinterShare+" connected OK")
; Set up default printer
If $sDefaultPrinter=$sPrinterShare
If SetDefaultPrinter("\\"+$sNewServer+"\"+$sPrinterShare)
udfLog("Error "+@ERROR+" setting default printer \\"+$sNewServer+"\"+$sPrinterShare)
Else
udfLog("Printer \\"+$sNewServer+"\"+$sPrinterShare+" set as default OK")
EndIf
EndIf
EndIf
EndIf
Next
Exit 1.
; Log changes and errors.
Function udfLog($sMessage)
$sMessage=@DATE+" "+@TIME+" ["+@WKSTA+"] "+$sMessage+@CRLF
$sMessage
If $sLogFilePath
Dim $fh
$fh=FreeFileHandle()
If Open($sLogFilePath,1+4)
"**ERROR** Cannot open log file "+$sLogFilePath+" for writing!"+@CRLF
Else
$gNull=WriteLine($fh,$sMessage)
$gNull=Close($fh)
EndIf
EndIf
EndFunction