Check if a user has an Exchange mailbox





4.00/5 (2 votes)
Sep 24, 2003

156607
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
.
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