Solved

VB Script to hide from exchange lists?

Posted on 2009-04-10
6
272 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
How does your email signature look on mobiles?

Do your employees use mobile devices to reply to emails? With mobile becoming increasingly important to the business world, it is in your best interest to make sure that your email signature looks great across all types of devices.

 

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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Exchange server is not supported in any cloud-hosted platform (other than Azure with Azure Premium Storage).
This process describes the steps required to Import and Export data from and to .pst files using Exchange 2010. We can use these steps to export data from a user to a .pst file, import data back to the same or a different user, or even import data t…
how to add IIS SMTP to handle application/Scanner relays into office 365.
This video discusses moving either the default database or any database to a new volume.

762 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

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now