' ***************************************************** ' ' Printers.vbs ' Created by: MCH & MCL (with help from a script CHI reappropriated from his old place of work) ' 19/03/2013 - Revision 1 - Inital script ' ' ***************************************************** ' ***************************************************** ' ' INSTRUCTIONS FOR USE! ' ' In all cases remember that rooms and machines should be entered in lowercase ' When adding a new pritner using the printer(x) variable ensure you enter a server too using the PrinterServer(x) variable ' ' ***************************************************** On Error Resume Next ' ***************************************************** ' MAIN SECTION ' ***************************************************** ' Declarations Const EVENT_SUCCESS = 0 Const EVENT_FAILURE = 1 Const EVENT_WARNING = 2 Const EVENT_INFORMATION = 4 Set WshShell = WScript.CreateObject("WScript.Shell") Set WshNetwork = WScript.CreateObject("WScript.Network") Set oPrinters = WshNetwork.EnumPrinterConnections Dim ComputerName, PrintServer, RoomName, DefaultPrintServer, Username, Domain Dim Printer(399) 'Printers 1-99=Ground, 100-199=First, 200-299=Second, 300-399=Music Dim PrinterServer(399) 'number should match the number above ' ***************************************************** ' Polulate variables wscript.echo "Start of Printer Script: " & Now LogtoEvent "Start Installation of Printers: " & Now, 1 ComputerName = LCase(WshNetwork.ComputerName) 'gets computername and sets to lowercase RoomName = Left(ComputerName, 4) 'sets roomname to the first 4 characters of the computername i.e. f41a DefaultPrintServer = "PRNSVR.ST-THOMASMORE.WALSALL.GOV.UK" 'Current Print Server Name Username = LCase(EnvString("username")) Domain = LCase(EnvString("userdomain")) 'Use for debugging only 'Username = "05testt" 'RoomName = "s60-" WScript.Echo "Username = " & Username WScript.Echo "Domain = " & domain WScript.Echo "Computername = " & ComputerName WScript.Echo "Roomname = " & RoomName WScript.Echo "" ' ***************************************************** ' Perform Functions to add Printers err.Clear 'Clears all Properties of the err object PrinterList DeletePrinters 'Deletes existing network printers :) WScript.Echo "Adding Room Specific Printers" AddPrinterbyRoom(RoomName) WScript.Echo "" WScript.Echo "Adding Machine Specific Printers" AddPrinterbyMachine(ComputerName) WScript.Echo "" 'WScript.Echo "Adding Group Specific Printers" 'AddPrinterbyGroup(GroupName) 'WScript.Echo "" ' ***************************************************** ' Clean up LogtoEvent "Installation of Printers Completed:" & Now, 1 Set WshShell = Nothing Set WshNetwork = Nothing Set oPrinters = Nothing WScript.Echo "End of Printer Script " & Now ' ***************************************************** ' FUNCTION SECTION ' ***************************************************** ' ***************************************************** ' Function: AddPrinterbyRoom ' Creates new printer connection ' Case statement must have room in lower case i.e. f30- or f41a ' Requires: RoomName - set by variable Function AddPrinterbyRoom(room) Select case room 'Ground Floor Rooms Case "g07-" AddAndDefault(8) Case "g09-" AddAndDefault(23) Case "g31-" AddAndDefault(23) AddPrinter(10) case "lib-" AddAndDefault(14) Case "g37-" AddAndDefault(29) AddPrinter(27) case "g44-" AddAndDefault(16) AddPrinter(18) case "g47-" AddAndDefault(17) AddPrinter(18) Case "g74-" AddAndDefault(28) 'First Floor Rooms case "f06-" AddAndDefault(102) case "f08-" AddAndDefault(103) case "f09-" AddAndDefault(104) case "f20-" AddAndDefault(100) case "f29-" AddAndDefault(109) case "f30-" AddAndDefault(110) case "f34-" AddAndDefault(113) case "f35-" AddAndDefault(114) case "f39-" AddAndDefault(115) case "f40-" AddAndDefault(116) case "f41-" AddAndDefault(117) case "f41a" AddAndDefault(118) case "f42-" AddAndDefault(119) case "f43-" AddAndDefault(120) case "f44-" AddAndDefault(121) case "f45-" AddAndDefault(122) case "f46-" AddAndDefault(123) case "f47-" AddAndDefault(125) case "f48-" case "f49-" AddAndDefault(127) case "f50-" AddAndDefault(128) 'Second Floor Rooms Case "s01-" AddAndDefault(215) Case "s14-" AddAndDefault(202) Case "s30-" AddAndDefault(205) Case "s34a" AddAndDefault(209) Case "s35a" AddAndDefault(216) Case "s53-" AddAndDefault(212) Case "s54-" AddAndDefault(213) Case "s60-" AddAndDefault(214) Case "s61-" AddAndDefault(215) AddPrinter(214) 'Music Rooms Case "m14-" AddAndDefault(300) Case "m08-" AddAndDefault(300) End Select End Function ' ***************************************************** ' Function: AddPrinterbyRoom ' Creates new printer connection ' Case statement must have computername in lower case i.e. f30-mch or f41a-0 ' Requires: ComputerName - set by variable Function AddPrinterbyMachine(machine) Select case machine case "f06a-0" AddAndDeafaultPrinter(105) AddPrinter(101) Case "dvi-s" AddAndDefault(101) 'special setup for virgo Case "f06a-nmc" AddAndDefaultPrinter(132) 'these machines dont fit the standard room naming convention Case "mm1" AddAndDefault(300) Case "mm2" AddAndDefault(300) Case "mm3" AddAndDefault(300) Case "mm4" AddAndDefault(300) Case "mm5" AddAndDefault(300) End Select End Function ' ***************************************************** ' Function: AddPrinterbyGroup ' Creates new printer connection ' Case statement must have computername in lower case i.e. f30-mch or f41a-0 ' Requires: ComputerName - set by variable Function AddPrinterbyGroup(GroupName) End Function ' ***************************************************** ' This function checks to see if the passed group name contains the current ' user as a member. Returns True or False Function IsMember(groupName) If IsEmpty(groupListD) then Set groupListD = CreateObject("Scripting.Dictionary") groupListD.CompareMode = 1 ADSPath = domain & "/" & Username Set userPath = GetObject("WinNT://" & ADSPath & ",user") For Each listGroup in userPath.Groups groupListD.Add listGroup.Name, "-" Next End If IsMember = CBool(groupListD.Exists(groupName)) End Function ' ***************************************************** ' This function checks to see if the passed printer name is currently ' connected to the users' account. Returns True or False Function IsConnected(PrinterName) If IsEmpty(PrinterListD) then Set PrinterListD = CreateObject("Scripting.Dictionary") PrinterListD.CompareMode = 1 For i = 0 to oPrinters.Count - 1 On Error Resume Next PrinterListD.Add oPrinters.item(i), "-" Next End if IsConnected = CBool(PrinterListD.Exists(PrinterName)) End Function ' ***************************************************** ' This function returns a particular environment variable's value. ' for example, if you use EnvString("username"), it would return ' the value of %username%. Function EnvString(variable) variable = "%" & variable & "%" EnvString = WshShell.ExpandEnvironmentStrings(variable) End Function ' ***************************************************** ' Function: AddPrinter ' Creates new printer connection ' Requires: Printer number (see printer list below) Function AddPrinter(nPrinter) On Error Resume Next PrinterConnection = "\\" & PrinterServer(nPrinter) & "\" & Printer(nPrinter) LogtoEvent "Printer Path: " & PrinterConnection & " and Printer ID: " & nPrinter, 1 If IsConnected(PrinterConnection) Then DeletePrinter(PrinterConnection) End If Err.Clear WScript.Echo "Adding New Printer Connection: Printer Path: " & PrinterConnection & " and Printer ID: " & nPrinter WshNetwork.AddWindowsPrinterConnection PrinterConnection If err.number <> 0 Then WScript.Echo "---" WScript.Echo Err.Number WScript.Echo Err.Description WScript.Echo Err.Source WScript.Echo "---" 'WshShell.Popup "Unable to connect to printer '" & PrinterConnection & "'." & vbNewline & vbNewline &_ ' "Please contact ICT Support.", 0, "Printer Installation Problem", vbExclamation WScript.Echo "Unable to add printer: " & PrinterConnection LogtoEvent "Unable to add Printer: " & PrinterConnection & err.Number & " " & err.Description & " " & err.Source, 0 err.clear else WScript.Echo "Added Printer: " & PrinterConnection LogtoEvent "Added Printer: " & PrinterConnection, 1 End if End Function ' ***************************************************** ' Function: DefaultPrinter ' Sets Printer as Default ' Requires: Printer number (see printer list below) Function DefaultPrinter(dPrinter) PrinterConnection = "\\" & PrinterServer(dPrinter) & "\" & Printer(dPrinter) WshNetwork.SetDefaultPrinter PrinterConnection WScript.Echo "Set " & PrinterConnection & " as default printer." LogtoEvent PrinterConnection & " set as default printer.", 1 End Function ' ***************************************************** ' Function: AddAndDefault ' Calls AddPrinter and DefaultPrinter functions ' Requires: Printer number (see printer list below) Function AddAndDefault(ndPrinter) AddPrinter(ndPrinter) DefaultPrinter(ndPrinter) End Function ' ***************************************************** ' Function: DeletePrinters ' Calls the isMember function with the specified group to see if the current user ' is a member of that group. ' Only deletes Network Printers if not a member of staff ' Requires: None Function DeletePrinters If isMember("Staff") Then ' Do Nothing - I.e. Do not remove any Printer Connections Wscript.Echo "Member of Staff - Existing printers WILL NOT be removed!" Else ' Delete existing connections to network printers Wscript.Echo "Not a Member of Staff - Existing printers WILL be removed!" For i = 0 to oPrinters.Count - 1' Step 2 On Error Resume Next If Left(oPrinters.Item(i), 3) <> "lpt" OR Left(oPrinters.Item(i), 3) <> "usb" Then delPrinter = oPrinters.item(i) WshNetwork.RemovePrinterConnection oPrinters.Item(i+1), true, True WScript.echo "Removed Printer: " & oPrinters.Item(i) LogtoEvent "Removed Printer: " & oPrinters.Item(i), 1 End If Next End If End Function ' ***************************************************** ' Function: DeletePrinter ' Removes printer specified in args ' Requires: Printerconnection (Full UNC) Function DeletePrinter(cPrinter) WshNetwork.RemovePrinterConnection cPrinter, true, True WScript.Echo "Printer " & cPrinter & " already installed so will be deleted before continuing." LogotoEvent "Printer " & cPrinter & " already installed so will be deleted before continuing." End Function ' ***************************************************** ' Function: LogtoEvent ' Logs Messages to the Event Log ' Requires: Message to log, validation Number (see below select statement) Function LogtoEvent (MSG, success) Select Case success Case 0 WshShell.LogEvent EVENT_FAILURE, MSG ' 0 is a error Case 1 WshShell.LogEvent EVENT_SUCCESS, MSG ' 1 is a success Case 2 WshShell.LogEvent EVENT_WARNING, MSG ' 2 is a warning Case 3 WshShell.LogEvent EVENT_INFORMATION, MSG ' do not use End Select End Function ' ***************************************************** ' Sub: PrinterList ' Populates Printer list of all the printer shares ' Variables PrinterServer(x) and Printer(x) ' DefaultPrintServer is set above ' Printers 1-99=Ground, 100-199=First, 200-299=Second, 300-399=Music Sub PrinterList ' *********************** ' Ground Floor (1-99) PrinterServer(1) = DefaultPrintServer printer(1)="G03-6220FX" 'Print 192.168.6.28 'PrinterServer(2) = DefaultPrintServer 'printer(2)="G03-HP2055" 'Print 192.168.6.24 'PrinterServer(3) = DefaultPrintServer 'printer(3)="G03-HP2320" 'Print 192.168.6.22 PrinterServer(4) = DefaultPrintServer printer(4)="G03-HP4250 (1001)" 'Print 192.168.129.201 PrinterServer(5) = DefaultPrintServer printer(5)="G03-HP4250 (1002)" 'Print 192.168.129.202 PrinterServer(6) = DefaultPrintServer printer(6)="G03-HP4700" 'Print 192.168.129.203 PrinterServer(7) = DefaultPrintServer printer(7)="G04-6220FX" 'Print 192.168.129.204 PrinterServer(8) = DefaultPrintServer printer(8)="G07-OKI511" 'Print 192.168.129.218 PrinterServer(9) = DefaultPrintServer printer(9)="G12-OKI352" 'Print 192.168.129.212 PrinterServer(10) = DefaultPrintServer printer(10)="G10-HP4250" 'Print 192.168.129.211 PrinterServer(11) = DefaultPrintServer printer(11)="G21-HP2055" 'Print 192.168.129.213 'PrinterServer(12) = DefaultPrintServer 'printer(12)="G24-6220FX" 'Print 192.168.6.28 'PrinterServer(13) = DefaultPrintServer 'printer(13)="G26-620ND" 'Print 192.168.6.27 PrinterServer(14) = DefaultPrintServer printer(14)="G33-HP4250" 'Print 192.168.65.201 PrinterServer(15) = DefaultPrintServer printer(15)="G34-FS5350" 'Print 192.168.129.209 PrinterServer(16) = DefaultPrintServer printer(16)="G44-OKI531" 'Print 192.168.128.201 PrinterServer(17) = DefaultPrintServer printer(17)="G47-620ND" 'Print 192.168.129.208 PrinterServer(18) = DefaultPrintServer printer(18)="G47-HP5550" 'Print 192.168.129.207 PrinterServer(19) = DefaultPrintServer printer(19)="G53-6220FX" 'Print 192.168.129.206 'PrinterServer(20) = DefaultPrintServer 'printer(20)="G62-HP2300" 'Print 192.168.6.17 PrinterServer(21) = DefaultPrintServer printer(21)="" PrinterServer(22) = DefaultPrintServer printer(22)="G66-FS5350" 'Print 192.168.128.202 PrinterServer(23) = DefaultPrintServer printer(23)="G09-HP2055" 'Print 192.168.129.216 PrinterServer(24) = DefaultPrintServer printer(24)="G76-HP2055" 'Print 192.168.129.214 PrinterServer(25) = DefaultPrintServer printer(25)="G82-OKI531" 'Print 192.168.128.204 PrinterServer(26) = DefaultPrintServer printer(26)="G84-FS5350" 'Print 192.168.129.205 PrinterServer(27) = DefaultPrintServer Printer(27)="G37-OKI711" 'Print 192.168.128.206 PrinterServer(28) = DefaultPrintServer Printer(28)="G74-620ND" 'Print 192.168.128.202 PrinterServer(29) = DefaultPrintServer Printer(29) = "G37-HP4250" 'Print 192.168.128.207 ' *********************** ' First Floor (100-199) PrinterServer(100) = DefaultPrintServer Printer(100)="F20-HP4250" 'Print 192.168.66.204 PrinterServer(101) = DefaultPrintServer Printer(101)="F04-FS5350" 'Print 192.168.68.201 PrinterServer(102) = DefaultPrintServer Printer(102)="F06-HP4525" 'Print 192.168.64.203 PrinterServer(103) = DefaultPrintServer Printer(103)="F08-620ND" 'Print 192.168.68.204 PrinterServer(104) = DefaultPrintServer Printer(104)="F09-HP2055" 'Print 192.168.68.205 PrinterServer(105) = DefaultPrintServer Printer(105)="F06A-OKI711" 'Print 192.168.68.205 'PrinterServer(106) = DefaultPrintServer 'Need to amend specific mention for F20-0 when removed 'Printer(106)="F20-OKI352" 'Print 192.168.10.1 'PrinterServer(107) = DefaultPrintServer 'Printer(107)="F27-620ND" 'Print 192.168.14.29 'PrinterServer(108) = DefaultPrintServer 'Printer(108)="F28-620ND" 'Print 192.168.14.26 PrinterServer(109) = DefaultPrintServer Printer(109)="F29-P6030" '192.168.65.211 PrinterServer(110) = DefaultPrintServer Printer(110)="F30-HP4250" 'Print 192.168.3.230 PrinterServer(111) = DefaultPrintServer Printer(111)="F31-FS5350" 'Print 192.168.3.150 PrinterServer(112) = DefaultPrintServer Printer(112)="F33-620ND" 'Print 192.168.65.202 PrinterServer(113) = DefaultPrintServer Printer(113)="F34-HP4525" 'Print 192.168.67.202 PrinterServer(114) = DefaultPrintServer Printer(114)="F35-HP4525" 'Print 192.168.67.201 PrinterServer(115) = DefaultPrintServer Printer(115)="F39-HP4250" 'Print 192.168.65.203 PrinterServer(116) = DefaultPrintServer Printer(116)="F40-620ND" 'Print 192.168.68.202 PrinterServer(117) = DefaultPrintServer Printer(117)="F41-620ND" 'Print 192.168.10.3 PrinterServer(118) = DefaultPrintServer Printer(118)="F41A-FS5350" 'Print 192.168.10.4 PrinterServer(119) = DefaultPrintServer Printer(119)="F42-FS5350" 'Print 192.168.65.210 PrinterServer(120) = DefaultPrintServer Printer(120)="F43-FS5350" 'Print 192.168.66.205 PrinterServer(121) = DefaultPrintServer Printer(121)="F44-FS5350" 'Print 192.168.64.201 PrinterServer(122) = DefaultPrintServer Printer(122)="F45-FS5350" 'Print 192.168.68.203 PrinterServer(123) = DefaultPrintServer Printer(123)="F46-FS5350" 'Print 192.168.66.202 'PrinterServer(124) = DefaultPrintServer 'Printer(124)="F46-HP5500" 'Print 192.168. PrinterServer(125) = DefaultPrintServer Printer(125)="F47-FS5350" 'Print 192.168.67.203 PrinterServer(126) = DefaultPrintServer Printer(126)="" PrinterServer(127) = DefaultPrintServer Printer(127)="F49-P6030" 'Print 192.168. PrinterServer(128) = DefaultPrintServer Printer(128)="F50-HP5225" 'Print 192.168.66.203 'PrinterServer(129) = DefaultPrintServer 'Printer(129)="F55-620ND" 'Print 192.168.14.21 'PrinterServer(130) = DefaultPrintServer 'Printer(130)="F56-620ND" 'Print 192.168.14.23 PrinterServer(131) = DefaultPrintServer Printer(131)="F61-620ND" 'Print 192.168.14.32 PrinterServer(132) = DeafultPrintServer Printer(132) = "F06a-FS5350-DATA" ' *********************** 'Second Floor (200-299) 'PrinterServer(200) = DefaultPrintServer 'printer(200)="S14-HP2055" 'Print 192.168.0.47 PrinterServer(201) = DefaultPrintServer printer(201)="S20-620ND" 'Print 192.168.162.204 PrinterServer(202) = DefaultPrintServer printer(202)="S22-HP4250" 'Print 192.168.162.202 PrinterServer(203) = DefaultPrintServer printer(203)="S22-OKI351" 'Print 192.168.162.203 PrinterServer(204) = DefaultPrintServer printer(204)="S29-FS5350" 'Print 192.168.162.201 PrinterServer(205) = DefaultPrintServer printer(205)="S30-OKI352" 'Print 192.168.161.202 '!!!!! PRINTER STILL EXISTS BUT PURELY FOR SCANNING PURPOSES!!!!! 'PrinterServer(206) = DefaultPrintServer 'printer(206)="S35-HP1415" 'Print 192.168.18.18 PrinterServer(207) = DefaultPrintServer printer(207)="S31-HP2055" 'Print 192.168.161.202 'PrinterServer(208) = DefaultPrintServer 'printer(208)="S33-HP4005" 'Print 192.168.18.4 PrinterServer(209) = DefaultPrintServer printer(209)="S34A-OKI511" 'Print 192.168.162.205 PrinterServer(210) = DefaultPrintServer printer(210)="S37-HP2055" 'Print 192.168.18.20 PrinterServer(211) = DefaultPrintServer printer(211)="S48-HP4250" 'Print 192.168.161.203 PrinterServer(212) = DefaultPrintServer printer(212)="S53-HP2055" 'Print 192.168.162.207 PrinterServer(213) = DefaultPrintServer printer(213)="S54-HP2055" 'Print 192.168.160.201 PrinterServer(214) = "S60-0.st-thomasmore.walsall.gov.uk" Printer(214)="S60-KM5670" PrinterServer(215)="S01-0.st-thomasmore.walsall.gov.uk" Printer(215)="S01-5670" PrinterServer(216) = DefaultPrintServer Printer(216) = "S35a-620ND" 'Print 192.168.162.206 ' *********************** ' Music (300-399) PrinterServer(300) = DefaultPrintServer printer(300)="M14-HP4250" 'Print 192.168.162.212 End Sub