Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Check if a user has an Exchange mailbox

0.00/5 (No votes)
23 Sep 2003 1  
Check in a command file if a user has an exchange mailbox

Introduction

This VBScript is used to check if a user has an exchange mailbox. The result is the Errorlevel variable which will be set. This script can be called in a command file. For example, you could run outlook only if the user has a mailbox.

Solution

The solution is to check if there is Exchange information in active directory for this user.
As you can see, the username (logonname) is optional. In case you do not give the username, then the name will be taken from the environment variable USERNAME.

In a command file (e.g. Logon script) it is sufficient to call this script and to check the Errorlevel.
REM *** Run Outlook when user has an exchange account ***
HasMailBox.vbs
If not errorlevel==1 outlook.exe

Change the Domain Controller information, replace MyMainDC with the domain controller you want to query. (LDAP)

DCServer = "MyMainDC"

'***********************************************

'

' HasMailbox.vbs

' (c) 2003 Computech 

' Written by Peter Verijke

' Checks is user has a mailbox in Exchange

'

' Usage : HasMailbox [LogonName]

' Returns : Errorlevel==1 : not found

'

'***********************************************

 

Dim ArgObj
Dim WshShell ' as object

Dim objEnv ' as collection

Dim objUser 'As IADsUser

Dim objMailbox 'As CDOEXM.IMailboxStore

Dim sUserLDAPName 'As String

Dim DCServer 'As String


 

' Get the Arguments object

Set ArgObj = WScript.Arguments

 

If ArgObj.Count < 1 Then
   Set WshShell = WScript.CreateObject("WScript.Shell")
   Set objEnv = WshShell.Environment("PROCESS")

 

   sUserName = objEnv("USERNAME")
else
   sUserName = UCase(ArgObj(0))
End If

 

DCServer = "MyMainDC"
sUserLDAPName = QueryActiveDirectory(sUserName)

 

Set objUser = GetObject("LDAP://" & DCServer + "/" & sUserLDAPName)

Set objMailbox = objUser
'check if user is mailbox enabled

If objMailbox.HomeMDB = "" Then
   WScript.Quit 1
Else
   WScript.Quit 0
End If

 


Public Function QueryActiveDirectory(sUserName)
'Function:      QueryActiveDirectory

'Purpose:       Search the Active Directory's Global Catalog for users

'Parameters:    UserName - user to search for

'Return:        The user's distinguished name

 
    Dim oAD 'As IADs

    Dim oGlobalCatalog 'As IADs

    Dim oRecordSet 'As Recordset

    Dim oConnection 'As New Connection

    Dim strADsPath 'As String

    Dim strQuery 'As String

    Dim strUPN 'As String


 

    set oRecordSet = CreateObject("ADODB.Recordset")
    set oConnection = CreateObject("ADODB.Connection")

 

    'Determine the global catalog path

    Set oAD = GetObject("GC:")
    For Each oGlobalCatalog In oAD
        strADsPath = oGlobalCatalog.AdsPath
    Next
    'Initialize the ADO object

    oConnection.Provider = "ADsDSOObject"
    'The ADSI OLE-DB provider

    oConnection.Open "ADs Provider"
    'Create the search string

    strQuery = "<" & strADsPath & _
      ">;(&(objectClass=user)(objectCategory=person)(samaccountName=" & _
      sUserName & "));userPrincipalName,cn,distinguishedName;subtree"  
        'Execute the query


    Set oRecordSet = oConnection.Execute(strQuery)
    If oRecordSet.EOF And oRecordSet.BOF Then    
       'An empty recordset was returned

        QueryActiveDirectory = "Not Found"
    Else    'Records were found; loop through them

        While Not oRecordSet.EOF
            QueryActiveDirectory = oRecordSet.Fields("distinguishedName")
            oRecordSet.MoveNext
        Wend
    End If
End Function

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here