Solved

VB Script to hide from exchange lists?

Posted on 2009-04-10
6
273 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
Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

 

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

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
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…
In this video we show how to create a User 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 >> Mailb…
In this video we show how to create a Resource Mailbox in Exchange 2013. We show this process by using the Exchange Admin Center. Log into Exchange Admin Center.: Navigate to the Recipients >> Resources tab.: "Recipients" is our default selection …

867 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

16 Experts available now in Live!

Get 1:1 Help Now