Tech01 Posted October 17, 2014 Posted October 17, 2014 Hi all, I need a VBS script to set certain printers to default to certain computers in the school, so ''\\Printerserver\Printer1'' needs to default on computer group ''PCgroup1'' I am rubbish with scripts, so any help would be great, if anyone has this setup already and could copy and paste what I need, I can then make the adjustments needed that would be great. Thanks J
plexer Posted October 17, 2014 Posted October 17, 2014 USE group policy preferences and item level targeting. Ben
AlexB Posted October 17, 2014 Posted October 17, 2014 If you want to use a VB script you might be able to adapt this to use security groups instead of OUs ' Script to mount printers based on computer's OU ' 20/09/2010 by ACB ' Reads printers and OUs from a printers.ini file specified in the printers.ini file ' printers.ini file is set by the strINIFile variable strINIFile = "\\printers.ini" ' Default print server is read from the ini file in the [settings] section from the "server" key ' The computer's OU is then read from the [printers] section as a comma separated string ' The first entry in the printer string is used as the default printer ' If the OU is not found no error is returned and no additional printers are mapped ' There must be no spaces between printer share names in the comma separated string ' Custom printers (printers from different print servers) are read from the [custom] section ' The result from the [custom] section provides a comma separated string containing "print server, share name" ' Custom printers are currently set to be the default. ' The must be no space after the comma after the server name in the comma separated string ' Finally any other network printers are removed (rather than removing all network printers and reconnecting, this saves time) ' The variable boolRemoveOtherPrinter can be set to false to remove this functionality boolRemoveOtherPrinter = true Set objSysInfo = CreateObject("ADSystemInfo") strName = objSysInfo.ComputerName arrComputerName = Split(strName, ",") arrOU = Split(arrComputerName(1), "=") strComputerOU = arrOU(1) strPrintServer = ReadIni( strINIFile, "settings", "server") Set objDictionary = CreateObject("scripting.dictionary") ' ******************** ' ******************** ' Temp fix to remove all printers first 'RemoveOtherPrinters ' ******************** ' ******************** HandleComputers Function HandleComputers() ' ********************* ' Read and mount printers for computer's OU strPrinters = ReadIni( strINIFile, "printers", strComputerOU) listPrinters = Split(strPrinters, ",") if UBound(listPrinters) >= 0 then MapPrinter listPrinters(intX), true For intX = 1 To UBound(listPrinters) MapPrinter listPrinters(intX), false Next end if ' ********************* ' ********************* ' Look for custom printers strCustomPrinter = ReadIni( strINIFile, "custom", strComputerOU) listCustomPrinters = Split(strCustomPrinter, ",") if UBound(listCustomPrinters) = 1 then ' string has correct format MapPrinterCustom listCustomPrinters(1), listCustomPrinters(0), true end if ' ********************* ' ********************* ' Look for printers for everyone strEvPrinters = ReadIni( strINIFile, "everyone", "Printers") listEvPrinters = Split(strEvPrinters, ",") if UBound(listEvPrinters) >= 0 then For intX = 0 To UBound(listEvPrinters) MapPrinter listEvPrinters(intX), false Next end if ' ********************* ' ********************* ' Remove other network printers if boolRemoveOtherPrinter then RemoveOtherPrinters end if ' ********************* End Function ' ********* ' Functions ' ********* Function MapPrinter(strPrinter,boolDefault) Set objNetwork = CreateObject("WScript.Network") if StrComp("local",strPrinter,1) <> 0 then MapPrinterCustom strPrinter, strPrintServer, boolDefault end if End Function Function MapPrinterCustom(strPrinter,strServer,boolDefault) Set objNetwork = CreateObject("WScript.Network") strFullPath = UCase("\\" & strServer & "\" & strPrinter) DebugPopup("Mounting:" & strFullPath) objNetwork.AddWindowsPrinterConnection strFullPath if boolDefault then objNetwork.SetDefaultPrinter strFullPath end if DebugPopup("Mounted:" & strFullPath) objDictionary.Add strFullPath, strPrinter End Function Function IsInList(list, value) IsInList = false For i = 0 To UBound(list) if UCase(list(i)) = UCase(value) then IsInList = true end if next End Function Function RemoveOtherPrinters() Dim objPrinters, intDrive, intNetLetter ' This is the heart of the script ' Here is where objPrinters enumerates the mapped drives Set objNetwork = CreateObject("WScript.Network") Set objPrinters = objNetwork.EnumPrinterConnections strNoDelete = ReadIni( strINIFile, "nodelete", "Printers") listNoDelete = Split(strNoDelete, ",") If objPrinters.Count <> 0 Then For i = 0 to objPrinters.Count - 1 Step 2 If Left(ucase(objPrinters.Item(i+1)),2) = "\\" Then 'if not listNoDelete.Contains(objPrinters.Item(i+1)) then if not IsInList(listNoDelete, objPrinters.Item(i+1)) then if not objDictionary.Exists(UCase(objPrinters.Item(i+1))) Then DebugPopup("Leftover: " & objPrinters.Item(i+1)) objNetwork.RemovePrinterConnection objPrinters.Item(i+1) end if end if end if Next end if End Function ' e.g. RemovePrinter "\\server\printer" Function RemovePrinter(strPrinter) DebugPopup("Removing " & strPrinter) Set objNetwork = WScript.CreateObject("WScript.Network") objNetwork.RemovePrinterConnection strPrinter, true, true End Function Function ReadIni( myFilePath, mySection, myKey ) ' This function returns a value read from an INI file ' ' Arguments: ' myFilePath [string] the (path and) file name of the INI file ' mySection [string] the section in the INI file to be searched ' myKey [string] the key whose value is to be returned ' ' Returns: ' the [string] value for the specified key in the specified section ' ' CAVEAT: Will return a space if key exists but value is blank ' ' Written by Keith Lacelle ' Modified by Denis St-Pierre and Rob van der Woude Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 Dim intEqualPos Dim objFSO, objIniFile Dim strFilePath, strKey, strLeftString, strLine, strSection Set objFSO = CreateObject( "Scripting.FileSystemObject" ) ReadIni = "" strFilePath = Trim( myFilePath ) strSection = Trim( mySection ) strKey = Trim( myKey ) If objFSO.FileExists( strFilePath ) Then Set objIniFile = objFSO.OpenTextFile( strFilePath, ForReading, False ) Do While objIniFile.AtEndOfStream = False strLine = Trim( objIniFile.ReadLine ) ' Check if section is found in the current line If LCase( strLine ) = "[" & LCase( strSection ) & "]" Then strLine = Trim( objIniFile.ReadLine ) ' Parse lines until the next section is reached Do While Left( strLine, 1 ) <> "[" ' Find position of equal sign in the line intEqualPos = InStr( 1, strLine, "=", 1 ) If intEqualPos > 0 Then strLeftString = Trim( Left( strLine, intEqualPos - 1 ) ) ' Check if item is found in the current line If LCase( strLeftString ) = LCase( strKey ) Then ReadIni = Trim( Mid( strLine, intEqualPos + 1 ) ) ' In case the item exists but value is blank If ReadIni = "" Then ReadIni = " " End If ' Abort loop when item is found Exit Do End If End If ' Abort if the end of the INI file is reached If objIniFile.AtEndOfStream Then Exit Do ' Continue with next line strLine = Trim( objIniFile.ReadLine ) Loop Exit Do End If Loop objIniFile.Close Else WScript.Echo strFilePath & " doesn't exists. Exiting..." Wscript.Quit 1 End If End Function Function DebugPopup(strMessage) 'Set WshShell = CreateObject("WScript.Shell") 'WshShell.Popup strMessage, , , 64 End Function
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now