VB Script for network printer deployment
VB script may be showing its age, but it's still incredibly useful. Printer deployment at my district is handled by means of a VB script that collects various bits of information that is then used to determine who gets what printers; said bits of information include: username, user group membership, user LDAP path, AD site name, computer name, computer group membership, and computer LDAP path. Obviously you don't need to use all of this, but this script will still pull it out for you and you can customize to your needs.
The sample script below I left in debug mode. You can run as is and it'll bring up the collected information in message boxes. In addition, the sub that pulls group membership calls out to a function that will in turn call back on itself for every nested group it finds. This will add nested group membership to the final results. I hope this helps...
Edit: The strExpectedPrtName string is derived from the computer name. Most machines in the district are named by building, room, and then number. For instance, a teacher computer in room 12 in building A would be: BDA-RM12-TW01. Classroom printers are named the same way, just minus the workstation designation, so it would be: BDA-RM12. So the at the end of the printer sub it'll attempt to add a printer with the name it derived from the classroom workstation name. If it doesn't exist, it'll simply skip over it an finish normally due to the error handling.
Dim strUserName
Dim strUserPath
Dim strADSite
Dim strCompName
Dim strCompPath
Dim strGroups
Dim strUserGroups
Dim strCompGroups
Call InitializeScript()
Call GetGroupMemberships
Call Debug
'Call Printers
Sub InitializeScript()
Set objNetwork = CreateObject("WScript.Network")
Set objADSysInfo = CreateObject("ADSystemInfo")
strUserName = objNetwork.UserName
strUserPath = "LDAP://" & objADSysInfo.UserName
strADSite = objADSysInfo.SiteName
strCompName = objNetwork.ComputerName
strCompPath = "LDAP://" & objADSysInfo.ComputerName
End Sub
Sub Debug
Msgbox "Username: " & strUserName
Msgbox "User LDAP Path: " & strUserPath
Msgbox "AD Site: " & strADSite
Msgbox "Computer Name: " & strCompName
Msgbox "LDAP Computer Path: " & strCompPath
Msgbox "User is a member of the following groups: " & strUserGroups
MsgBox "Computer is a member of the following groups:" & strCompGroups
End Sub
Sub GetGroupMemberships
Set objUser = GetObject(strUserPath)
Set colUserGroups = objUser.Groups
Set objComp = GetObject(strCompPath)
Set colCompGroups = objComp.Groups
For Each objUserGroup in colUserGroups
strGroups = strGroups & objUserGroup.CN & "|"
GetNested(objUserGroup)
Next
strUserGroups = strGroups
strGroups = ""
For Each objCompGroup in colCompGroups
strGroups = strGroups & objCompGroup.CN & "|"
GetNested(objCompGroup)
Next
strCompGroups = strGroups
strGroups = ""
End Sub
Function GetNested(objGroup)
On Error Resume Next
colMembers = objGroup.GetEx("memberOf")
For Each strMember in colMembers
strPath = "LDAP://" & strMember
Set objNestedGroup = GetObject(strPath)
strGroups = strGroups & objNestedGroup.CN & "|"
GetNested(objNestedGroup)
Next
End Function
Sub Printers
Set objNetwork = CreateObject("WScript.Network")
If Len(strCompName) < 5 Then
strExpectedPrtName = ""
Else
Position = InStr(5, StrCompName, "-") - 1
If Position < 0 Then Position = 5
strExpectedPrtName = LCase(Left(strCompName, Position))
intCompNumber = Right(strCompName,2)
End If
If InStr(LCase(strCompPath), "BuildingA") Then
strPrintServer = "\\BldA-PrtSrv01\"
objNetwork.AddWindowsPrinterConnection strPrintServer & "BldA-Copier"
objNetwork.SetDefaultPrinter strPrintServer & "BldA-Copier"
ElseIf InStr(LCase(strCompPath), "BuildingB") Then
strPrintServer = "\\BldB-PrtSrv01\"
objNetwork.AddWindowsPrinterConnection strPrintServer & "BldB-Copier"
If InStr(LCase(strUserGroups), "staff") Then
objNetwork.AddWindowsPrinterConnection strPrintServer & "BldB-OfficeCopier"
objNetwork.AddWindowsPrinterConnection strPrintServer & "BldB-MediaCopy"
End If
If InStr(LCase(strUserGroups), "student") Then
objNetwork.AddWindowsPrinterConnection strPrintServer & "BldB-LibPrt01"
objNetwork.AddWindowsPrinterConnection strPrintServer & "BldB-LibPrt02"
End If
End If
On Error Resume Next
objNetwork.AddWindowsPrinterConnection strPrintServer & strExpectedPrtName
If Err.Number <> 0 Then
'Nothing to see here folks, move along.
Exit Sub
Else
objNetwork.SetDefaultPrinter strPrintServer & strExpectedPrtName
End If
End Sub
Edited by Duke5A

0 Comments
Recommended Comments
There are no comments to display.
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