GMH77
asked on
Set default printer by Group Membership in AD (VB Script)
Hey!
I am trying to create a simple script to set the default printer for users.
The users are spread to different locations and they would like to have their local network printers as default based on group membership
I have created several groups in AD by printername ("S-PrinterDefault-PRShare Name") and added users to these groups.
In our exsisting VB script we have mapped all printers and I assume that I have to add this default line after this lines.
I am trying to create a simple script to set the default printer for users.
The users are spread to different locations and they would like to have their local network printers as default based on group membership
I have created several groups in AD by printername ("S-PrinterDefault-PRShare
In our exsisting VB script we have mapped all printers and I assume that I have to add this default line after this lines.
Hi, here's another script you can use to map printers by group membership, and set one as the default printer.
In your case, if you already have all printers mapped, then just specify one printer per group, and use True as the "default flag".
Regards,
Rob.
In your case, if you already have all printers mapped, then just specify one printer per group, and use True as the "default flag".
Regards,
Rob.
Set objADSysInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objADSysInfo.UserName)
' THIS LINE MUST BE PLACED IN THE MAIN CODE TO ALLOW THE DICTIONARY
' OBJECT TO REMAIN PERSISTENT FOR THE ISMEMBEROFGROUP Function
Dim objMemberships
' The array consists of these elements per line
'<Group Name>|<Printer Share>|<Default Flag>
' The Group Name can be ALL to map a printer for everyone
' and the default flag can be True, False, or omitted
' to set that printer as the default for that group
arrPrinters = Array( _
"ALL|\\server1\CommonPrinter", _
"Sydney-NO-2270MFD-Default|\\fs1\syndeymfd|True", _
"Sydney-NO-2270MFD|\\fs1\sydneymfd" _
)
Set objNetwork = CreateObject("WScript.Network")
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Section to map the network printers
For Each strPrinterSpec In arrPrinters
arrBits = Split(strPrinterSpec, "|")
strGroup = arrBits(0)
strPrinter = arrBits(1)
If UBound(arrBits) = 2 Then
blnDefault = arrBits(2)
If LCase(blnDefault) = "true" Then
blnDefault = True
ElseIf LCase(blnDefault) = "false" Then
blnDefault = False
Else
blnDefault = False
End If
Else
blnDefault = False
End If
If IsMemberOfGroup(objUser, strGroup) = True Then
On Error Resume Next
objNetwork.AddWindowsPrinterConnection strPrinter
If Err.Number <> 0 Then
MsgBox "Error mapping printer " & strPrinter & ". Error " & Err.Number & ": " & Err.Description
Err.Clear
ElseIf blnDefault = True Then
objNetwork.SetDefaultPrinter strPrinter
End If
On Error GoTo 0
End If
Next
Function IsMemberOfGroup(objADUser, strGroupCN)
Dim strGroupName
If IsEmpty(objMemberships) = True Then
Set objMemberships = CreateObject("Scripting.Dictionary")
objMemberships.Add LCase("ALL"), 0
If IsNull(objADUser.MemberOf) = False Then
If TypeName(objADUser.MemberOf) = "String" Then
objMemberships.Add LCase(Mid(Split(objADUser.MemberOf, ",")(0), 4)), 0
Else
For Each strGroupName In objADUser.MemberOf
objMemberships.Add LCase(Mid(Split(strGroupName, ",")(0), 4)), 0
Next
End If
End If
End If
If objMemberships.Exists(LCase(strGroupCN)) = True Then
IsMemberOfGroup = True
Else
IsMemberOfGroup = False
End If
End Function
Try this
Option Explicit
Dim objPrinter
Set objPrinter = CreateObject("WScript.Network")
objPrinter.SetDefaultPrinter "\\ServerName\PrinterName"
' End of example VBScript
ASKER
Sorry guys, havent been able to give you any update regarding this question.
I would like it to be as simple as possible is it possible to say somthing like
Map all printers here
Map printer 1
Map printer 2
and
If member of AD GRoupWithNamePrinter1
set default printer = \\SERVER\Printer1
and or
If member of AD GRoupWithNamePrinter2
set default printer = \\SERVER\Printer2
I would like it to be as simple as possible is it possible to say somthing like
Map all printers here
Map printer 1
Map printer 2
and
If member of AD GRoupWithNamePrinter1
set default printer = \\SERVER\Printer1
and or
If member of AD GRoupWithNamePrinter2
set default printer = \\SERVER\Printer2
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Sorry that I havent been able to answer back
I will try this configuration asap
I will try this configuration asap
Hi, did you have any time to get back to this?
Regards,
Rob.
Regards,
Rob.
ASKER
No, havent got the time to test it cause customer wants to wait :(
Have planned to to this in June I hope
Have planned to to this in June I hope
https://www.experts-exchange.com/questions/24842436/VBScript-to-assign-default-printer-based-on-user's-group-membership.html