[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 284
  • Last Modified:

VB Script to hide from exchange lists?

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
ExproChrisDillon
Asked:
ExproChrisDillon
  • 3
  • 2
1 Solution
 
brislaneCommented:
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
 
ExproChrisDillonAuthor Commented:
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
 
brislaneCommented:
Do a response.write strClass and see what it contains
0
Free tool for managing users' photos in Office 365

Easily upload multiple users’ photos to Office 365. Manage them with an intuitive GUI and use handy built-in cropping and resizing options. Link photos with users based on Azure AD attributes. Free tool!

 
ExproChrisDillonAuthor Commented:
as i said bit of an amateur with this, can you explain?
0
 
ExproChrisDillonAuthor Commented:
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
 
Chris DentPowerShell DeveloperCommented:

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

[Webinar] Kill tickets & tabs using PowerShell

Are you tired of cycling through the same browser tabs everyday to close the same repetitive tickets? In this webinar JumpCloud will show how you can leverage RESTful APIs to build your own PowerShell modules to kill tickets & tabs using the PowerShell command Invoke-RestMethod.

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