Posted by: Anthony Drewery | October 27, 2006

VBScript to export SMTP proxy addresses

Part of the way my current employer has grown is through acquisitions and mergers. Consequently we’ve been supporting more than 10 legacy SMTP domains from various shipping lines. Now that we’re decommissioning our systems it’s time to do some housekeeping and discontinue these domains.

The first step was to check that all objects had their primary SMTP address set to the main domain name. This was done more than a year ago but needed to be reconfirmed. A custom LDAP query that included the syntax  (!mail=*@our_main_domain.com) sufficed.

Next I wrote a script that exported all SMTP proxy addresses for user objects. This was to be used as a reference in the unlikely event that problems arose down the line. The LDAP query can easily be modified for groups, contacts and public folders. It’s not the most exciting of scripts but it does the job. You can download it here: AllSMTPProxies.vbs.txt

As I wanted to be very specific and meticulous in the removal of legacy proxy addresses I wrote another script that targets a specific SMTP domain. In this script you can specify the domain by changing the strSMTPDomain value. The script will then only export the names and addresses for proxies that match the SMTP domain. You can download the script here: SpecificSMTPProxies.vbs.txt

In my next post I’ll be using PutEx in a script to remove proxy addresses from AD objects.


Responses

  1. Is there any way to have this script also export public folder and Distribution list addresses. It worked great for my users, but I also need a report of public folder and DL SMTP addresses…

    Thanks

  2. Just update the LDAP string for different object classes. For example:
    strLDAP = ";(&(mailnickname=*)(objectClass=publicfolder));adspath;subtree"
    or
    strLDAP = ";(&(mailnickname=*)(objectClass=group));adspath;subtree"
  3. I use a script to upload a white list to our spam filter provider. My problem is that I can get all mail addresses and all DL addresses. I cannot get the secondary smtp addresses. Is this possible.

    example.
    primary = jim.gingrich
    James.gingrich is not returned in the query.
    Thanks in Advance

  4. The current script is looking for = “smtp:”, so the script only pulls the secondary addresses. Primary addresses are formatted in CAPS, so you can force all address to lower-case by using the LCase() function:

    For Each Address In arrProxyAddresses
    If LCase(left(Address,5))= “smtp:” Then
    objTextFile.writeLine(FoundObject.Displayname & vbTab & Address)

    That’s it! Nice and simple.

    Good Luck
    End if
    Next

  5. How would you go about modifying the script to connect to a different domain? We run a resource domain model and my machine is not a member of the domain that holds the Exchange Org.

    Thanks!

  6. The script does not handle users with only one primary SMTP proxy address.

  7. When I modify your script to use the group or public folder object class the following is returned when the script executes: “(49, 2) Microsoft VBScript runtime error: Object not a collection”. No output is generated. Any idea what would cause this?

    Thanks……………..Eric

  8. Hi,
    I also recived the folllowinmg error, one txt file is created, but only with 3 to 4 names, the script gave the following error
    Line: 49
    Char: 2
    Error: Obejct not a collection
    Code : 800A01c3
    Source: Microsoft VBScript runtime error

  9. I had the same error…
    Line: 49
    Char: 2
    Error: Obejct not a collection
    Code : 800A01c3
    Source: Microsoft VBScript runtime error

    I found out that some users had no secondary address (proxyAddress) and the script failed because it can’t process it.
    To solve this I added the line:
    If IsArray(arrProxyAddresses) Then…
    before the line:
    For Each Address In arrProxyAddresses…
    to verify that arrProxyAddresses was an array (collection) before it gets processed as one.

  10. I edited the script to gather all mail enabled groups – and didn’t change “smtp:” – so it pulled all groups that had proxy addresses, and then bombed out when it got to one that didn’t have a “smtp:” lowercase. I simply changed the line to “SMTP:” and that grabbed and listed the primary SMTP address for each group. Simple enough.

    If left(Address,5)= “SMTP:” Then

  11. Wav… exactly what I needed
    Thanks

    “AllSMTPProxies.vbs.txt”

  12. Great blog, reading it through RSS feed as well

  13. What if you want to export non-SMTP types? Like CCMail or DIR? I tried updating the script to:

    If left(Address,5)= “DIR:” Then

    and it finds nothing. Works great for smtp: and SMTP:

    any thoughts?


Leave a response

Your response:

Categories