Solved

VB Script to hide from exchange lists?

Posted on 2009-04-10
6
274 Views
Last Modified: 2012-05-06
I am trying to run the script posted below but getting an error - Type Mismatch, Line 24, Char 5.  Something to do with the IF statement i suspect.  Can anyone help please?
' Change the following line to the OU you want to hide
strOUpath = "****"
 
 ' This will do the target OU and everything under it
Const ADS_SCOPE_BASE = 0
 
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
 
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_BASE 
 
objCommand.CommandText = "SELECT ADsPath, objectClass, objectCategory FROM 'LDAP://" & strOUpath & "'"
Set objRecordSet = objCommand.Execute
 
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    strClass = objRecordSet.Fields("objectClass").Value
    strCategory = objRecordSet.Fields("objectCategory").Value
 
    If strClass = "user" OR strCategory = "person" Then
        strUserPath = objRecordSet.Fields("ADsPath").Value
        Set objUser = GetObject(strUserPath)
        objUser.MSExchHideFromAddressLists = TRUE
        objUser.SetInfo
    End If
 
    objRecordSet.MoveNext
Loop

Open in new window

0
Comment
Question by:ExproChrisDillon
  • 3
  • 2
6 Comments
 
LVL 2

Expert Comment

by:brislane
ID: 24116439
I don't think you can compare strings that way.
Try the following :


if strComp(strClass, "user") OR strComp(strCategory, "person") Then

Open in new window

0
 

Author Comment

by:ExproChrisDillon
ID: 24116665
made suggested change, new error message is type mismatch 'strClass' same line and char number.  Sorry, i'm a bit of an amateur with VB script.
0
 
LVL 2

Expert Comment

by:brislane
ID: 24116712
Do a response.write strClass and see what it contains
0
Does Powershell have you tied up in knots?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 

Author Comment

by:ExproChrisDillon
ID: 24128519
as i said bit of an amateur with this, can you explain?
0
 

Accepted Solution

by:
ExproChrisDillon earned 0 total points
ID: 24137854
Got the answer from mcpp661 -

mcpp661
04.13.2009 at 04:10PM IST, ID: 24130354
Here's what I use, it works like a champ for me.
Option Explicit
On Error Resume Next
Dim strOUpath, strClass, strCategory, strUserPath
Dim objConnection, objCommand, objRecordSet, objUser
 
 ' Change the following line to the OU you want to hide
strOUpath = "ou=<ou_name_here>,dc=<domain_component_name_here>,dc=<domain_component_name_here>"
 
 ' This will do the target OU and everything under it
Const ADS_SCOPE_SUBTREE = 2
 
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
 
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
 
objCommand.CommandText = "SELECT ADsPath, objectClass, objectCategory FROM 'LDAP://" & strOUpath & "'"
Set objRecordSet = objCommand.Execute
 
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    strClass = objRecordSet.Fields("objectClass").Value
    strCategory = objRecordSet.Fields("objectCategory").Value
 
    If strClass = "contact" OR strCategory = "person" Then
        strUserPath = objRecordSet.Fields("ADsPath").Value
        Set objUser = GetObject(strUserPath)
        objUser.MSExchHideFromAddressLists = TRUE
        objUser.SetInfo
    End If
 
    objRecordSet.MoveNext
Loop
 
Set objConnection = Nothing
Set objCommand = Nothing
Set objRecordSet = Nothing
Set objUser = Nothing
 
WScript.Quit

Open in new window

0
 
LVL 70

Expert Comment

by:Chris Dent
ID: 24156847

It is much better to filter like this during the query rather than within the returned values. In this case that would mean doing:

objCommand.CommandText = "SELECT ADsPath, objectClass, objectCategory FROM 'LDAP://" & _
  strOUpath & "' WHERE objectClass='contact' OR objectCategory='person'"

And considering the query you may just do "WHERE objectCategory='person'" this will return Users and Contacts in the same way as the above.

Then when you come to the loop in the Record Set you would just do:

Do Until objRecordSet.EOF
  strUserPath = objRecordSet.Fields("ADsPath").Value
  Set objUser = GetObject(strUserPath)
  objUser.MSExchHideFromAddressLists = TRUE
  objUser.SetInfo
Loop

The If statements would not be needed because you're only returning the things you're interested in during the search.

Chris
0

Featured Post

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Following basic email etiquette rules will help you write a professional email and achieve a good, lasting impression with your contacts.
Scam emails are a huge burden for many businesses. Spotting one is not always easy. Follow our tips to identify if an email you receive is a scam.
In this video we show how to create a Shared Mailbox in Exchange 2013. We show this process by using the Exchange Admin Center. Log into Exchange Admin Center.: First we need to log into the Exchange Admin Center. Navigate to the Recipients >> Sha…
In this video we show how to create an Accepted Domain in Exchange 2013. We show this process by using the Exchange Admin Center. Log into Exchange Admin Center.: First we need to log into the Exchange Admin Center. Navigate to the Mail Flow >> Ac…

773 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