Article ID: 220043
Article Last Modified on 9/28/2007
APPLIES TO
- Microsoft Exchange Server 5.5 Service Pack 1
- Microsoft Exchange Server 5.5 Service Pack 2
- Microsoft Active Directory Service Interfaces 2.0
- Microsoft Active Directory Service Interfaces 2.5
This article was previously published under Q220043
SUMMARY
You can use the Active Directory Service Interfaces (ADSI) to obtain the distribution list membership for a given Microsoft Exchange Server Recipient object. This step-by-step article describes how to accomplish this using either Microsoft Visual C++ or Microsoft Visual Basic.
NOTE: This is an alternative to using the members collection returned by the IADsUser::Groups method. One key difference is that enumerating the members collection will give you the group objects rather than the group names. See the documentation for IADsUser::Groups for more information.
back to the top
Find a Distribution List Membership
An Exchange Server Recipient object holds its distribution list(s) membership through the LDAP memberOf attribute. This attribute is either returned as a single string or a variant array of strings.
The following code will bind to a Recipient object using LDAP, cache the membership attribute, and print the distribution list(s) to the screen.
back to the top
Using Visual C++
/* include activeds.h link with activeds.lib and adsiid.lib */ HRESULT func () { HRESULT hr; IADs *pADs; VARIANT pvProp; BSTR bstrpropName; long lLBound, lUBound; // Initialization VariantInit(&pvProp); CoInitialize(NULL); bstrpropName = SysAllocString(L"memberOf"); // Bind to an Exchange recipient object hr = ADsGetObject(L"LDAP://servername/o=org/ou=site/cn=recipients/cn=fhc", IID_IADs, (void**) &pADs ); if ( !SUCCEEDED(hr) ) { return hr; } // Get recipient's members hr = pADs->Get(bstrpropName, &pvProp); if (FAILED(hr)) { return hr; } if (VT_BSTR == pvProp.vt) /* only one DL */ { printf ("%S\n", pvProp.bstrVal); } else /* multiple DLs in an array */ { SafeArrayGetLBound(pvProp.parray, 1, &lLBound); SafeArrayGetUBound(pvProp.parray, 1, &lUBound); for (long i = lLBound; i <= lUBound; i++) { VARIANT svar; SafeArrayGetElement(pvProp.parray, &i, &svar); if (VT_BSTR == svar.vt && svar.bstrVal) printf("\n%S",svar.bstrVal); } } // Releasing VariantClear(&pvProp); SysFreeString (bstrpropName); pADs->Release(); return S_OK; }
Using Visual Basic
Dim RecipObj As IADs Dim memberOf As Variant Set RecipObj = GetObject("LDAP://servername/o=org/ou=site/cn=recipients/cn=fhc") memberOf = RecipObj.Get("memberOf") If IsArray(memberOf) Then 'User is on more than one DL For Each member In memberOf Debug.Print member Next Else Debug.Print memberOf End If
REFERENCES
For more information about Active Directory Services Interfaces (ADSI), please refer to the following Web site:
Additional query words: kbXchge kbXchge550 kbMsg kbADSI kbGrpMsg
Keywords: kbfaq kbhowtomaster kbmsg KB220043