'#################################################################### 'This script has 2 functions: ' '1. Connects printers by workstations OU. Beware CASE sensitive OU names. '2. Connects printers for Thin Clients (and PC's) connecting to Terminal Servers. Note: Since these machines are NOT part ... ' of the Sawston domain, the first three letters of the machine name is used to determine the room. ' '#################################################################### '## Ensure that ALL variables are declared. Option Explicit On error resume next '## Declare Variables Dim LogErrors,objWshNetwork,oPrinters,i,objAdsSystemInfo,objComputerName Dim strclName,objOU,strOU, sh,objProc,objTextFile,strText,strComputerName LogErrors = True '## Create Objects Set objWshNetwork = CreateObject("WScript.Network") Set Sh = CreateObject("WScript.Shell") Set objAdsSystemInfo = CreateObject("adsysteminfo") Set objComputerName = GetObject("LDAP://" & objAdsSystemInfo.ComputerName) '## get the Computername as String Value strComputerName = UCase(replace(objComputerName.Name,"CN=","")) '## Used for Debugging (should be commented out in production) 'wscript.echo strComputerName '## GET OU of Computer using the computer name Set objOU = GetObject(objComputerName.Parent) strOU = replace(objOU.Name,"OU=","") '## Delete all existing NETWORK printer connections Set oPrinters = objwshNetwork.EnumPrinterConnections For i = 0 to oPrinters.Count - 1 Step 2 'WScript.Echo oPrinters.Item(i+1) objWshNetwork.RemovePrinterConnection oPrinters.Item(i+1), true, true Err.Clear Next '## Check if the computer name is one of the Terminal Servers '## If it is a Terminal Servers, we If strComputerName = "SVCTS01" OR strComputerName = "SVCTS02" OR strComputerName = "SVCTS03" OR strComputerName = "SVCTS04" then '## Clear any errors that occured as part of deleting the prnters Err.Clear '## Since this is a Terminal Server, get the clientName strclName = Left(UCASE(Sh.ExpandEnvironmentStrings("%CLIENTNAME%")),3) '## Check Client name (first 3 Chars) and MAP default Printer SELECT CASE strclname Case "IT1","EXC","ITS" objWshNetwork.AddWindowsPrinterConnection "\\Svcfs02\IT1HP3500" objWshNetwork.SetDefaultPrinter "\\Svcfs02\IT1HP3500" Case "IT2" objWshNetwork.AddWindowsPrinterConnection "\\svcfs02\IT3HP3600" objWshNetwork.SetDefaultPrinter "\\svcfs02\IT3HP3600" Case "IT3" objWshNetwork.AddWindowsPrinterConnection "\\svcfs02\IT3HP3600" objWshNetwork.SetDefaultPrinter "\\svcfs02\IT3HP3600" Case "SCW" objWshNetwork.AddWindowsPrinterConnection "\\svcfs02\STUDCHP3500" objWshNetwork.SetDefaultPrinter "\\svcfs02\STUDCHP3500" Case "LIB" objWshNetwork.AddWindowsPrinterConnection "\\svcfs02\HP3600LIB" objWshNetwork.SetDefaultPrinter "\\svcfs02\HP3600LIB" Case "A1W","A2W" objWshNetwork.AddWindowsPrinterConnection "\\svcfs02\ARTHP3500" objWshNetwork.SetDefaultPrinter "\\svcfs02\ARTHP3500" Case "H4W" objWshNetwork.AddWindowsPrinterConnection "\\Svcfs02\H4LJ1100" objWshNetwork.SetDefaultPrinter "\\Svcfs02\H4LJ1100" Case "DTF" objWshNetwork.AddWindowsPrinterConnection "\\Svcfs02\HP3600FOOD" objWshNetwork.SetDefaultPrinter "\\Svcfs02\HP3600FOOD" Case "DTR" objWshNetwork.AddWindowsPrinterConnection "\\Svcfs02\T7LJ5P" objWshNetwork.SetDefaultPrinter "\\Svcfs02\T7LJ5P" Case "ASU" objWshNetwork.AddWindowsPrinterConnection "\\svcfs01\SpicerWing2200" objWshNetwork.SetDefaultPrinter "\\svcfs01\SpicerWing2200" Case "SCI" objWshNetwork.AddWindowsPrinterConnection "\\svcfs02\SW22055" objWshNetwork.AddWindowsPrinterConnection "\\svcfs02\SW32055" objWshNetwork.SetDefaultPrinter "\\svcfs02\SW22055" Case "DRW" objWshNetwork.AddWindowsPrinterConnection "\\svcfs02\P1505DR" objWshNetwork.SetDefaultPrinter "\\svcfs02\P1505DR" Case "T6W" objWshNetwork.AddWindowsPrinterConnection "\\Svcfs02\T7LJ5P" objWshNetwork.SetDefaultPrinter "\\Svcfs02\T7LJ5P" Case "MAT" objWshNetwork.AddWindowsPrinterConnection "\\Svcfs02\MATHSHP3500" objWshNetwork.SetDefaultPrinter "\\Svcfs02\MATHSHP3500" Case else CreateLog("Client Name did not Match") Err.Clear '## Printer NOT mapped by script so Run Net2Printer RDP set objProc = sh.Exec("C:\Program Files (x86)\Net2Printer RDP\NPServerRDP.exe") if Err.Number <> 0 then CreateLog("Error Running Net2Printer") Err.Clear End if END SELECT '## Check for any errors mapping the printer if Err.Number <> 0 then set objProc = sh.Exec("C:\Program Files (x86)\Net2Printer RDP\NPServerRDP.exe") CreateLog("Error Mapping Printer") Err.Clear End if '## END of script if the machine name was a Terminal Server wscript.quit end if ' ## EnD of Script to the Termninal Servers ' ## Script will continue if machines is NOT a Terminal Server. Select Case strOU Case "ICT1" Call PrintICT1() Case "ICT2" Call PrintICT2() Case "ICT3_Suite" Call PrintICT3_Suite() Case "Lang_Suite" Call PrintLang_Suite() Case "Learn2Learn" Call PrintLearn2Learn() Case "Library" Call PrintLibrary() Case "Maths_Laptop" Call PrintMaths_Laptop() Case "Science_Trolley_1" Call PrintScience_Trolley_1() Case "Student_Centre" Call PrintStudent_Centre() Case "Science_Trolley_2" Call PrintScience_Trolley_2() Case "Art" Call PrintArt() Case "DTFood" Call PrintDTFOOD() Case "DT" Call PrintDT() Case "ITSupport" Call PrintITSupport() Case "English" Call PrintEnglish() Case "Science_Wing" Call PrintScience_Wing() Case "Duty_room" Call PrintDuty_room() Case "Maths_Laptops" End Select Sub PrintICT1() MapPrinter "\\Svcfs02\IT1HP3500" End Sub Sub PrintICT2() MapPrinter "\\svcfs02\IT3HP3600" End Sub Sub PrintICT3_Suite() MapPrinter "\\svcfs02\IT3HP3600" End Sub Sub PrintLang_Suite() MapPrinter "\\svcfs02\L7HP2600" End Sub Sub PrintLearn2Learn() MapPrinter "\\svcfs02\H4LJ1100" End Sub Sub PrintLibrary() MapPrinter "\\svcfs02\HP3600LIB" End Sub Sub PrintMaths_Laptops() MapPrinter "\\svcfs02\MATHSHP3500" End Sub Sub PrintScience_Trolley_1() MapPrinter "\\svcfs02\SCIHP3500" End Sub Sub PrintStudent_Centre() MapPrinter "\\svcfs02\STUDCHP3500" End Sub Sub PrintScience_Trolley_2() MapPrinter "\\svcfs02\HP1022P2" End Sub Sub PrintArt() MapPrinter "\\svcfs02\ArtHP3500" End Sub Sub PrintDTFOOD() MapPrinter "\\svcfs02\HP3600food" End Sub Sub PrintDT() MapPrinter "\\svcfs02\T7LJ5P" End Sub Sub PrintITSupport() MapPrinter "\\itsupportjenny\itsupport" End Sub Sub PrintEnglish() MapPrinter "\\svcfs01\SpicerWing2200" End Sub Sub PrintScience_Wing() MapPrinter "\\svcfs02\SW22055" MapPrinter "\\svcfs02\SW32055" End Sub Sub PrintDuty_room() MapPrinter "\\svcfs02\P1505DR" End Sub Function CreateLog(Msg) if LogErrors = False then Exit Function Set Sh = CreateObject("WScript.Shell") Dim objFSO, objFolder, objShell, objFile Dim strDirectory, strFile, NewFile 'strDirectory = "\\spare_70\tslogs$" strDirectory = "\\svcwc1\Temp" strFile = "\" & Sh.ExpandEnvironmentStrings("%USERNAME%") & ".csv" 'strFile = "\Newfile.txt" NewFile = False ' Create the File System Object Set objFSO = CreateObject("Scripting.FileSystemObject") ' Check that the strDirectory folder exists If objFSO.FolderExists(strDirectory) Then Set objFolder = objFSO.GetFolder(strDirectory) Else Set objFolder = objFSO.CreateFolder(strDirectory) 'WScript.Echo "Just created " & strDirectory End If If objFSO.FileExists(strDirectory & strFile) Then Set objFolder = objFSO.GetFolder(strDirectory) Else Set objFile = objFSO.CreateTextFile(strDirectory & strFile) 'Wscript.Echo "Just created " & strDirectory & strFile NewFile = True End If set objFolder = nothing set objFile = nothing ' OpenTextFile Method needs a Const value ' ForAppending = 8 ForReading = 1, ForWriting = 2 Const ForAppending = 8 Set objTextFile = objFSO.OpenTextFile _ (strDirectory & strFile, ForAppending, True) If NewFile = True Then strText = "Date,Server,strclname,%CLIENTNAME%,USER,Other Note, Error Num, Error Description" objTextFile.WriteLine(strText) end if strText = cstr(Now()) & "," & Sh.ExpandEnvironmentStrings("%COMPUTERNAME%") & "," & strclname & "," & Sh.ExpandEnvironmentStrings("%CLIENTNAME%") & "," & Sh.ExpandEnvironmentStrings("%USERNAME%") & "," & Msg & "," & Err.Number & "," & Err.Description ' Writes strText every time you run this VBScript objTextFile.WriteLine(strText) objTextFile.Close Set objFSO = nothing End Function Function MapPrinter(name) Dim PrinterFlag,a,LOOP_COUNTER PrinterFlag = False For a = 0 To oPrinters.Count - 1 Step 2 '## Remove all existing mapped Network printers before connecting new ones '## Not sure if you need this here again? if Left(oPrinters.Item(LOOP_COUNTER + 1),2) = "\\" Then objWshNetwork.RemovePrinterConnection oPrinters.Item(LOOP_COUNTER + 1),True,True End If If name = oPrinters.Item(a) Then PrinterFlag = True Elseif Left(oPrinters(a),3) = "LPT" Then PrinterFlag = True objWshNetwork.AddWindowsPrinterConnection name Elseif Left(oPrinters(a),6) = "USB001" Then PrinterFlag = True objWshNetwork.AddWindowsPrinterConnection name Else PrinterFlag = False End If Exit For Next If PrinterFlag = False Then objWshNetwork.AddWindowsPrinterConnection name objWshNetwork.SetDefaultPrinter name End If '## Check for any errors mapping the printer if Err.Number <> 0 then CreateLog("Error Mapping Local Printer") Err.Clear End if Set oPrinters = Nothing End Function