Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Are you someone who maintains Exchange 2003 servers? Did you ever have a requirement to set the Mailbox quotas for a lot of users at one go? Here is your solution. The sample code below uses ADSI and Cdoexm to set mailbox quotas for multiple user.
The following sample is a simple VBScript code sample that sets the StoreQuota, OverQuotaLimit, Hardlimit for a mailbox. To use this sample, paste the following code in a new text file, and then name the file SetMailboxQuota.txt:
'This script sets the StoreQuota, OverQuotaLimit, Hardlimit for a mailbox.
' USAGE: cscript SetMailboxQuota.vbs DATAFILE
' This code has to be run on a box that has ESM or Exchange 2003 Installed.
Dim obArgs
Dim cArgs
Set obArgs = WScript.Arguments
cArgs = obArgs.Count
Main
Sub Main()
Dim FileSysObj
Dim DataFileName
Dim DataFile
Dim sAMAccoutname
Dim vDistinguishedName
Const ForReading = 1, ForWriting = 2, ForAppending = 8, TristateFalse = 0
On error Resume Next
If cArgs <> 1 Then
WScript.Echo "Usage: cscript SetMailboxQuota.vbs DATAFILE"
Exit Sub
End If
Set FileSysObj = CreateObject("Scripting.FileSystemObject")
DataFileName = obArgs.Item(0)
Set DataFile = FileSysObj.OpenTextFile(DataFileName, ForReading, False,0)
Do While Not DataFile.AtEndOfStream
sAMAccoutname = DataFile.ReadLine
vDistinguishedName = GetDNFromSam(sAMAccoutname)
If vDistinguishedName <> "" then
WScript.Echo "Sam Account Name:" & sAMAccoutname
WScript.Echo "Distinguished Name:" & vDistinguishedName
'Please change limits as per your needs
'The Size Specified is in Kb
Call SetLimits(vDistinguishedName, 18432,20480,25600)
If Err.Number <> 0 Then
sMsg = "Error Setting Limits"
sMsg = sMsg & Err.Number & " " & Err.Description
WScript.Echo sMsg
End If
else
WScript.Echo "Could not get Distinguished Name for " & sAMAccoutname
end if
WScript.Echo
Loop
DataFile.Close
Set DataFile = Nothing
Set FileSysObj = Nothing
End Sub
Function GetDNFromSam(strsAMAccountName)
Dim iAdCont
Dim iAdGC
Dim Conn
Dim Com
Dim Rs
Dim varGCAdsPath
Dim strQuery
' Get the Global Catalog
Set iAdCont = GetObject("GC:")
For Each iAdGC In iAdCont
varGCAdsPath = iAdGC.ADsPath
Next
Set Conn = createobject("ADODB.Connection")
Set Com = createobject("ADODB.Command")
' Open the Connection
Conn.Provider = "ADsDSOObject"
Conn.Open "ADs Provider"
' Build the query to find the user based on his Alias
strQuery = "<" & varGCAdsPath & ">;(sAMAccountName=" & strsAMAccountName & ");mailNickName,distinguishedName;subtree"
Com.ActiveConnection = Conn
Com.CommandText = strQuery
Set Rs = Com.Execute
GetDNFromSam = Rs.Fields("distinguishedName")
'Clean Up
Rs.Close
Conn.Close
Set Rs = Nothing
Set Com = Nothing
Set Conn = Nothing
Set iAdCont = Nothing
Set iAdGC = Nothing
End Function
Sub SetLimits(strUserDN, vStoreQuota,vOverQuotaLimit,vHardLimit)
Const AD_MODE_READ_WRITE = 3
Dim strLDAP
Dim objPerson
Dim objMailbox
strLDAP = "LDAP://" & strUserDN
Set objPerson = CreateObject("CDO.Person")
objPerson.DataSource.Open strLDAP,,AD_MODE_READ_WRITE
Set objMailbox = objPerson.GetInterface("IMailboxStore")
'check if the user is mailbox enabled
If objMailbox.HomeMDB = "" Then
Wscript.Echo "No Mailbox found."
Else
'Give Warning at
Wscript.Echo "Current StoreQuota:" & objMailbox.StoreQuota
Wscript.Echo "Setting StoreQuota to:" & vStoreQuota & "(KB)"
objMailbox.StoreQuota = vStoreQuota
'Prevent Sending at
Wscript.Echo "Current OverQuotaLimit:" & objMailbox.OverQuotaLimit & "(KB)"
Wscript.Echo "Setting OverQuotaLimit to:" & vOverQuotaLimit & "(KB)"
objMailbox.OverQuotaLimit = vOverQuotaLimit
'Prevent Sending and Recieving at
Wscript.Echo "Current Hardlimit:" & objMailbox.HardLimit & "(KB)"
Wscript.Echo "Setting StoreQuota to:" & vHardLimit & "(KB)"
objMailbox.HardLimit = vHardLimit
' Clearing defaults
Wscript.Echo "Disabling Database Defaults"
objMailbox.EnableStoreDefaults = false
objPerson.DataSource.Save
End If
Set objMailbox = Nothing
Set objPerson = Nothing
End Sub
The list of sAMAccountName's can be provided via a text file(Datafile). The Datafile contains the sAMAccountName's of the users(one on each line). So assuming your Datafile is called "sAMAccounts.txt" and is on the C:\, you would run the script as follows:
C:\>Cscript SetMailboxQuota.vbs C:\sAMAccounts.txt
The account that you are logged on to the computer must have permissions to change the limits on the mailboxes.
Comments
- Anonymous
April 06, 2009
The comment has been removed - Anonymous
April 07, 2009
The comment has been removed - Anonymous
September 13, 2009
The comment has been removed - Anonymous
September 14, 2009
Are you running the code on the Server? make sure you have cdoex registered. Looks like the code is failing when it's trying to create a object of CDO.PersonPerson CoClasshttp://msdn.microsoft.com/en-us/library/aa488386(EXCHG.65).aspx