Jump to content

Recommended Posts

Posted

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

Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...