' Code: Dmitry Stremkouski ' Date: 17.11.2006 ' License: GPL ' Usage: ServerName MailBox PostmasterLogin PostmasterPassword ' example: ' cscript //nologo ListFoldersForUser.vbs ex-2 testuser superv1sor myPassw0rd ' note: ' ex-2 must be Exchange server, ex-2 must contain testuser's mailbox. ' superv1sor ought have access rights to testuser's mailbox ' Get command line arguments. Dim obArgs Dim cArgs Dim iCount Set obArgs = WScript.Arguments cArgs = obArgs.Count Main Sub Main() Dim sUrl Dim sMsg On Error Resume Next ' Check argument count. If cArgs <> 4 Then sMsg = "Usage: cscript MailboxSize.vbs " sMsg = sMsg & "SERVERNAME MAILBOXNAME USERNAME PASSWORD" WScript.Echo sMsg Exit Sub End If sUrl = "http://" & obArgs.Item(0) & "/exchange/" & obArgs.Item(1) & "/NON_IPM_SUBTREE" WScript.Echo "Folders for: [" & "http://" & obArgs.Item(0) & "/exchange/" & obArgs.Item(1) & "]" iCount = 0 RecurseFolder(sUrl) WScript.Echo WScript.Echo "~~~~~~~~~~~~~~~" WScript.Echo "Total found: " & iCount End Sub Public Sub RecurseFolder(sUrl) Dim oXMLHttp Dim oXMLDoc Dim oXMLSizeNodes Dim oXMLHREFNodes Dim oXMLHasSubsNodes Dim sQuery Set oXMLHttp = CreateObject("Microsoft.xmlhttp") If Err.Number <> 0 Then WScript.Echo "Error Creating XML object" WScript.Echo Err.Number & ": " & Err.Description Set oXMLHttp = Nothing End If ' Open DAV connection. oXMLHttp.open "SEARCH", sUrl, False, obArgs.Item(2), obArgs.Item(3) If Err.Number <> 0 Then WScript.Echo "Error opening DAV connection" WScript.Echo Err.Number & ": " & Err.Description Set oXMLHttp = Nothing End If ' Set up query. sQuery = "" sQuery = sQuery & "" sQuery = sQuery & "SELECT ""http://schemas.microsoft.com/" sQuery = sQuery & "mapi/proptag/x0e080003"", ""DAV:hassubs"" FROM SCOPE " sQuery = sQuery & "('SHALLOW TRAVERSAL OF """ & sUrl & """') " sQuery = sQuery & "WHERE ""DAV:isfolder"" = true" sQuery = sQuery & "" sQuery = sQuery & "" ' Set request headers. oXMLHttp.setRequestHeader "Content-Type", "text/xml" oXMLHttp.setRequestHeader "Translate", "f" oXMLHttp.setRequestHeader "Depth", "0" oXMLHttp.setRequestHeader "Content-Length", "" & Len(sQuery) ' Send request. oXMLHttp.send sQuery If Err.Number <> 0 Then WScript.Echo "Error Sending Query" WScript.Echo Err.Number & ": " & Err.Description Set oXMLHttp = Nothing End If ' Load XML. Set oXMLDoc = oXMLHttp.responseXML ' Get the XML nodes that contain the individual sizes. Set oXMLSizeNodes = oXMLDoc.getElementsByTagName("d:x0e080003") ' Get the XML nodes that contain the individual HREFs. Set oXMLHREFNodes = oXMLDoc.getElementsByTagName("a:href") ' Get the XML nodes that contain the individual HasSubs. Set oXMLHasSubsNodes = oXMLDoc.getElementsByTagName("a:hassubs") ' Loop through the nodes, and then add all of the sizes. For iM = 0 to oXMLSizeNodes.length - 1 WScript.Echo "URL: [" & oXMLHREFNodes.Item(iM).nodeTypedValue & "]" iCount = iCount + 1 ' If the folder has subfolders, call your recursive function to ' process subfolders. If oXMLHasSubsNodes.Item(iM).nodeTypedValue = True Then RecurseFolder oXMLHREFNodes.Item(iM).nodeTypedValue End If Next ' Clean up. Set oXMLSizeNodes = Nothing Set oXMLDoc = Nothing oXMLHttp.close Set oXMLHttp = Nothing End Sub