Mailbox Cleanup After Cross Organizational Moves
I thought I would share some code I wrote for doing bulk mailbox cleanups on Exchange 2003 for cross-organizational mailbox moves. This code is nearly identical to that in my previous post, but this one takes an input file to process several mailboxes at once. The input file must be tab-separated and contain the distinguished name in the first column and the smtp email address in the second. No headers are necessary on the input file.
'*******************************************************************************
'*** Declare Variables
'*******************************************************************************
Dim oFS '*** Object variable for file system object
DIM strUserDN '*** This is the distinguished name of the user (string)
DIM objUser '*** Object variable for containing the user
DIM strEmailAddr '*** This becomes the external-to-exchange email address that mail is forwarded to
DIM sFile '*** String variable that holds the file name to open from the parameters
DIM oArgs '*** Array Variable to hold parameter objects
DIM iFile '*** Object variable that links to the file object being opened
DIM Values '*** Holds the CSV values in an Array
'*******************************************************************************
'*** Initialize and Declare Variables and Parameters
'*******************************************************************************
On Error Resume Next
'*** Grab the file name from the arguments command line
Set oArgs = wscript.arguments
sFile = oArgs(0)
'*** Open the file, check the file, make sure it is valid format
Set oFS = CreateObject("Scripting.FileSystemObject")
Set iFile = oFS.OpenTextFile(sFile, 1)
'*** Loop through the file, and reset all mailbox properties
Do Until iFile.AtEndofStream
Do '*** Inner Do Loop
Err.Clear
Values = Split(iFile.Readline, Chr(9))
'*** Set variables
strUserDN = Values(0)
strEmailAddr = Values(1)
'*** Connect to the user and disable mailbox
wscript.echo "Connecting to user " & strUserDN
Set objUser = GetObject("LDAP://" & strUserDN)
If Err<>0 Then
wScript.Echo "[ERROR] - COULD NOT BIND TO OBJECT " & strUserDN & ". sKIPPING USER"
wScript.Echo ".... " & Err.Description
Exit Do
End If
wscript.echo ".... Removing mailbox"
objUser.DeleteMailBox
objUser.SetInfo()
If Err<> 0 Then
wScript.echo "[ERROR] - COULD NOT DELETE EXISTING MAILBOX. ABORTING CONVERSION"
wScript.Echo ".... " & Err.Description
wScript.echo ".... Original Mailbox should be intact for user."
Exit Do
End If
wscript.echo ".... setting email address: " & strEmailAddr
objUser.MailEnable strEmailAddr
objUser.Put "internetEncoding",1310720
objUser.SetInfo()
If Err<> 0 Then
wScript.Echo "[ERROR] - COULD NOT MAIL-ENABLE USER."
wScript.Echo ".... " & Err.description
wScript.Echo "Mailbox has been disabled, but user is not in a mail-enabled state."
End If
Exit Do
Loop '*** Inner Do Loop
Loop