VB active directory logon script

Posted on 2006-07-20
Medium Priority
Last Modified: 2008-02-01

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

Question by:Nael_Shahid
  • 3
  • 3
LVL 71

Accepted Solution

Chris Dent earned 2000 total points
ID: 17147148

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.


Author Comment

ID: 17147323
Thanks Chris; I'll test this out and let you know.

Author Comment

ID: 17147767
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?

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

LVL 71

Expert Comment

by:Chris Dent
ID: 17152705

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.


Author Comment

ID: 17152716
LVL 71

Expert Comment

by:Chris Dent
ID: 17152762



Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
Suggested Courses

622 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question