Exchange Organization Address Extraction

This is a VBS script for Windows Server 2003 and Exchange 2003 to list all the non-local e-mail addresses in AD. It’s handy if you have a 3rd part spam filter and need to get a list of addresses to let through:

Option Explicit
'Declare our variables
Dim adoLDAPCon, adoLDAPRS, strLDAP, strDomainName, objNetwork
Dim strDN, objUser, colAddr, strAddr
' Grab the domain name
Set objNetwork = CreateObject("Wscript.Network")
strDomainName = objNetwork.UserDomain
' Create an ADO DB connection through ADSI to get a list of users and public folders
Set adoLDAPCon = CreateObject("ADODB.Connection")
adoLDAPCon.Provider = "ADsDSOObject"
adoLDAPCon.Open "ADSI"
strLDAP = "'LDAP://" & strDomainName & "'"
WScript.Echo "Getting mail addresses from " & strLDAP
Set adoLDAPRS = adoLDAPCon.Execute("select ADsPath from " & strLDAP & _
  " WHERE objectClass = 'publicFolder' OR objectClass = 'User'")
  While Not adoLDAPRS.EOF
    strDN = adoLDAPRS.Fields("ADsPath").value
    Set objUser = GetObject(strDN)
    ' Only try to display if the object has "proxyAddresses" set
    If Not IsEmpty(objUser.proxyAddresses) Then
      colAddr = objUser.GetEx("proxyAddresses")
      For Each strAddr in colAddr
         strAddr = LCase(strAddr)
         If Left(strAddr, 5) = "smtp:" And Right(strAddr, 6) <> ".local" Then _
           Wscript.Echo objUser.cn & ": " & Mid(strAddr, 6)
      Next
    End If
    Set objUser = Nothing
    adoLDAPRS.MoveNext
 Wend
adoLDAPRS.Close
Set adoLDAPRS = Nothing
Set adoLDAPCon = Nothing

You can modify the query strings to get only Public Folders or to get only users.  Also, modifying the output format is easy enough.