Solved

VBscript to Hide from exchange list

Posted on 2011-02-15
14
1,472 Views
Last Modified: 2012-05-11
I have a vbscript that works perfectly well at disabling an account and removing all group membership apart from the Primary Group.

The subroutine is shown below.  If however I uncomment the two lines for hiding from the exchange list it comes up with an error code  -2147463153

would you be able to tell me what is wrong

'--------------------------------------------------------------------------------------------------
' This subroutine Disables users.
'--------------------------------------------------------------------------------------------------

Sub DisableUser
      
'*********************************************************************************
'  Disable the User Account
'*********************************************************************************

      objUser.AccountDisabled = True
      objUser.SetInfo

      On Error Resume next

      objUser.Put "msExchHideFromAddressLists", True
      objUser.SetInfo

      If Err.Number = 0 Then
            Report "User hidden successfully."
      Else
            Report Err.number
            Report Err.Desciption
            Report "Sorry something went wrong, check user name."
      End If

' Enumerate all direct group memberships (except the "primary" group).
For Each objGroup In objUser.Groups
' Remove the user from the group.
objGroup.Remove(objUser.AdsPath)
Next


End Sub
0
Comment
Question by:WNottsC
  • 7
  • 6
14 Comments
 

Author Comment

by:WNottsC
ID: 34904343
I have just changed:-

objUser.Put "msExchHideFromAddressLists", True

to

objUser.msExchHideFromAddressLists = True

and get the following error

438    Object doesn't support this property or method
0
 
LVL 12

Expert Comment

by:prashanthd
ID: 34904505
Hi

The code mentioned by you for hiding works and no changes required.
objUser.Put "msExchHideFromAddressLists", True
objuser.setinfo

can you give err.clear at beginning of subroutine and try
0
 

Author Comment

by:WNottsC
ID: 34904548
I still get the -2147463153  error
0
 
LVL 12

Expert Comment

by:prashanthd
ID: 34904809
Can you give the description of the error, can you also check if the hide value is being set to true.
0
 
LVL 12

Expert Comment

by:prashanthd
ID: 34905609
Hi

Does the user whom you are trying to hide have exchange attributes, is the user mail enabled?
We cannot hide user if he is not mail enabled.

I had tested the script against mail enabled user and it worked fine, for non mail enabled user it threw -2147463153  error.

0
 
LVL 11

Expert Comment

by:Tasmant
ID: 34905924
you could try this:
const ADS_PROPERTY_UPDATE = 2
objUser.PutEx ADS_PROPERTY_UPDATE, "msExchHideFromAddressLists", True
objUser.SetInfo

or maybe this
objUser.Get("msExchHideFromAddressLists")
objUser.Put "msExchHideFromAddressLists", True
0
 

Author Comment

by:WNottsC
ID: 34906376
this error does not bring back a description, it does have exchange attributes but with exchange 2007 you no longer have tabs on the AD user account for the exchange information.  Not sure if exchange 2007 is the reason this error is coming up.

Tried it again on a different account and it is still having the same issue. even using

objUser.Get("msExchHideFromAddressLists")
objUser.Put "msExchHideFromAddressLists", True
objUser.SetInfo



0
 

Author Comment

by:WNottsC
ID: 34906540
we are using this code for connecting to the object could this be the issue.  However it works for disabling the account and removing group membership just not the exchange list

Set objUser = GetObject("WinNT:// { NETBIOS Domain name } " & "/" & strstaffID)
0
 
LVL 12

Expert Comment

by:prashanthd
ID: 34906542
Can you try to fetch the information and display the present value, using the objUser.Get("msExchHideFromAddressLists") to check the error it is throwing. Try to only get the value, not set the value.
0
 

Author Comment

by:WNottsC
ID: 34906555
this gives us a 2147463155 error
0
 

Author Comment

by:WNottsC
ID: 34906562
sorry and the description for that error is The directory property cannot be found in the cache
0
 
LVL 12

Expert Comment

by:prashanthd
ID: 34906656
can you use adsiedit to check if the property exists for the user.
0
 

Author Comment

by:WNottsC
ID: 34906665
the property exists but it is <not set>
0
 
LVL 12

Accepted Solution

by:
prashanthd earned 500 total points
ID: 34913964
LDAP has to be used to set this info. WinNT cannot be used to refrence this.

http://www.rlmueller.net/UserAttributes.htm
check Spreadsheet of attributes exposed by the WinNT provider

Try the below code, set value of staffid to struser
'On Error Resume Next

struser = "staffid"

Dim objRootDSE, strDomain, strUsername, objConnection, objCommand, objRecordSet, strDN
Const ADS_SCOPE_SUBTREE = 2

' Get domain components
Set objRootDSE = GetObject("LDAP://RootDSE")
strDomain = objRootDSE.Get("DefaultNamingContext")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(inputfile, 1)

' Set ADO connection
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

' Set ADO command
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

objCommand.CommandText = "SELECT distinguishedName FROM 'LDAP://" & strDomain & "' WHERE objectCategory='person' AND samaccountname = '" & struser & "'"

' Set recordset to hold the query result
Set objRecordSet = objCommand.Execute

' If a Group was found - Retrieve the distinguishedName
If Not objRecordSet.EOF Then
    strDN = "LDAP://" & objRecordSet.Fields("distinguishedName").Value
    
    Set objUser = GetObject(strDN)
    Err.Clear
    
    objUser.Put "msExchHideFromAddressLists", True
    objUser.SetInfo
    
    If Err.Number = 0 Then
        Report "User hidden successfully."
    Else
        Report Err.number
        Report Err.Desciption
        Report "Sorry something went wrong, check user name."
    End If
    
Else
    
    WScript.Echo "user not found"
    
End If

Open in new window

0

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
lync 2013 7 36
Question on security Audit 2 59
Need to test AD authentication 3 25
Macro Excel - Multiple If conditions 2 16
Installing a printer using group policy preferences is not that hard let’s take a look at it. First lets open up your group policy console and edit the policy you want to add it to. I recommend creating a new policy for each printer makes it a l…
Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
This tutorial will walk an individual through the process of transferring the five major, necessary Active Directory Roles, commonly referred to as the FSMO roles to another domain controller. Log onto the new domain controller with a user account t…
This tutorial will walk an individual through the process of configuring their Windows Server 2012 domain controller to synchronize its time with a trusted, external resource. Use Google, Bing, or other preferred search engine to locate trusted NTP …

747 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

11 Experts available now in Live!

Get 1:1 Help Now