[Last Call] Learn how to a build a cloud-first strategyRegister Now

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 252
  • Last Modified:

VB active directory logon script


Please could someone take a look at this logon script for me.  It is basically a logon script to set a users printer based on active directory group membership.
The script seems to run fine but does not do the requested action by mapping a printer when I add my self to any of the groups.  No errors are reported at all.  I added a wscript.echo command to the beginning of the subroutine, however this comment is never echoed suggesting my subroutine sections are not working.
I know this is a big ask as you need to work this script out; I would very much appreciate the help so please could someone tell me where I have gone wrong?

See script bellow

Option explicit
'On error resume next
Dim wshNet
Dim ADSysInfo
Dim CurrentUser
Dim GroupMember
Dim strGroups
Dim a, b, c
Dim PCompPrinter
Dim PRoomPrinter
Dim ReceptionPrinter
Const PComp = "CN=Post Completion"
Const PRoom = "cn=Post Room"
Const Reception = "cn=Reception"

PCompPrinter = "\\Cs1\nclepostcomp"
PRoomPrinter = "\\Cs1\NCLE - Epson C3000 Colour Laser"
ReceptionPrinter = "\\Cs1\NCLE - RECEPTION HP LaserJet 1100"
Set wshNet = CreateObject("WScript.Network")
Set ADSysInfo = CreateObject("ADSystemInfo")
Set CurrentUser = GetObject("LDAP://" _
    & ADSysInfo.UserName)
strGroups = LCase(Join(CurrentUser.MemberOf))

Select Case GroupMember
        Case a = Instr(strGroups, PComp)
        Case b = Instr(strGroups, PRoom)
        Case c = Instr(strGroups, Reception)
End Select

Sub PCompsub
wshNet.AddWindowsPrinterConnection PCompPrinter
wshNet.SetDefaultPrinter PCompPrinter
End Sub

Sub PRoomsub
wshNet.AddWindowsPrinterConnection PRoomPrinter
wshNet.SetDefaultPrinter PRoomPrinter
End Sub

Sub Receptionsub
wshNet.AddWindowsPrinterConnection ReceptionPrinter
wshNet.SetDefaultPrinter ReceptionPrinter
End Sub

  • 3
  • 3
1 Solution
Chris DentPowerShell DeveloperCommented:

Your Case Statement is incorrect. It can't be used as you have it right now.

You would have to do:

If InStr(strGroups, PComp) Then
ElseIf InStr(strGroups, PRoom) Then
ElseIf InStr(strGroups, Reception) Then
End If

The Syntax for Case is as follows:

Select Case <Variant>
      Case "<Value 1>"
      Case "<Value 2>"
      Case Else
End Select

In your original code you're expecting the Case statement to use a function to evaluate something as well so it'll never call the subroutines.

Nael_ShahidAuthor Commented:
Thanks Chris; I'll test this out and let you know.
Nael_ShahidAuthor Commented:
Hi Chris,

When I first amended this it still did not work; however when I removed "LCase" from "strGroups = LCase(Join(CurrentUser.MemberOf))" it did work.

I wrote this script with the aid of a book so I do not understand what "LCase" does etc...could you explain for me please?

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Chris DentPowerShell DeveloperCommented:

LCase simply converts whatever you give it into lower case.

Instead of using LCase it would be better to change it a little like this:

If InStr(1, strGroups, PComp, VbTextCompare) Then
ElseIf InStr(1, strGroups, PRoom, VbTextCompare) Then
ElseIf InStr(1, strGroups, Reception, VbTextCompare) Then
End If

Then it would ignore the case of the letter when trying to do the match - by default it's case sensitive.

Nael_ShahidAuthor Commented:
Chris DentPowerShell DeveloperCommented:



Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now