Code C# utilisant WebDAV pour calculer la taille d’une boîte aux lettres Exchange 2000/2003


Voici un code en C# qui vous permettra d'obtenir la taille d'une boîte aux lettres Exchange. Le résultat retourné est identique à celui que vous retrouvez dans l'ESM (Exchange System Manager).



Ce code reprend simplement le code proposé dans cet article technique : http://support.microsoft.com/default.aspx?scid=kb;en-us;320071


Sous Visual Studio, créez une solution de type "Console Application" appélée RecursiveLoopFolders, ajoutez une classe que vous nommerez WebDAVSize.cs. Copier/coller dans cette classe le code suivant:


using System;


using System.Net;


using System.IO;


using System.Text;


using System.Xml;


 


namespace RecursiveLoopPublicFolders


{


      public class WebDAVSize


      {


            static public long FolderSize(string URL, string userName, string userPassword, string userDomain)


            {


                  System.Net.HttpWebRequest Request;


                  System.Net.WebResponse Response;


                  System.Net.CredentialCache MyCredentialCache;


                  string strQuery ="";


                  byte[] bytes = null;


                  System.IO.Stream RequestStream = null;


                  System.IO.Stream ResponseStream = null;


                  XmlDocument ResponseXmlDoc = null;


                 


                  XmlNodeList oXMLSizeNodes = null;


                  XmlNodeList oXMLHREFNodes = null;


                  XmlNodeList oXMLHasSubsNodes = null;


                  long totalSize=0;


 


                  try


                  {


                        strQuery = @"<?xml version=""1.0""?>";


                        strQuery += @"<g:searchrequest xmlns:g=""DAV:"">";


                        strQuery += @"<g:sql>SELECT ""http://schemas.microsoft.com/";


                        strQuery += @"mapi/proptag/x0e080003"", ""DAV:hassubs"" FROM SCOPE ";


                        strQuery += "('SHALLOW TRAVERSAL OF \"" + URL + "\"') ";


                        strQuery += @"WHERE ""DAV:isfolder"" = true";


                        strQuery += @"</g:sql>";


                        strQuery += @"</g:searchrequest>";


 


                        MyCredentialCache = new System.Net.CredentialCache();


                        MyCredentialCache.Add( new System.Uri(URL),


                             "NTLM",


                             new System.Net.NetworkCredential(userName, userPassword, userDomain)


                             );


 


                        Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(URL);


                        Request.Credentials = MyCredentialCache;


                        Request.Method = "SEARCH";


                        bytes = Encoding.UTF8.GetBytes((string)strQuery);


                        Request.ContentLength = bytes.Length;


                        RequestStream = Request.GetRequestStream();


                        RequestStream.Write(bytes, 0, bytes.Length);


                        RequestStream.Close();


                        Request.ContentType = "text/xml";


                        Request.Headers.Add("Translate", "f");


                        Request.Headers.Add("Depth", "0");


                        Response = (HttpWebResponse)Request.GetResponse();


                        ResponseStream = Response.GetResponseStream();


                        ResponseXmlDoc = new XmlDocument();


                        ResponseXmlDoc.Load(ResponseStream);


 


                        // Get the XML nodes that contain the individual sizes.


                        oXMLSizeNodes = ResponseXmlDoc.GetElementsByTagName("d:x0e080003");


 


                        oXMLHREFNodes = ResponseXmlDoc.GetElementsByTagName("a:href");


                        oXMLHasSubsNodes = ResponseXmlDoc.GetElementsByTagName("a:hassubs");


     


                        // Loop through the nodes, and then add all of the sizes.


                        for (int i=0; i < oXMLSizeNodes.Count; i++)


                        {


                             totalSize += long.Parse(oXMLSizeNodes.Item(i).InnerText);


                            


                             if (oXMLHasSubsNodes.Item(i).InnerText == "1")


                             {


                                   totalSize += FolderSize(oXMLHREFNodes.Item(i).InnerText, userName, userPassword, userDomain);


                             }


                        }


 


                        ResponseStream.Close();


                        Response.Close();


                       


                        return totalSize;


                  }


                  catch(Exception ex)


                  {


                        Console.WriteLine(ex.Message);


                        return 0;


                  }


            }


      }


}



Ensuite, voici le code de l'appelant:


[STAThread]


static void Main(string[] args)


{


      long totalSizeO;


      double totalSizeKO;


 


      string userName = "exchangesuperuser";


 


      totalSizeO = WebDAVSize.FolderSize("http://davrous2005/exchange/" + userName + "/NON_IPM_SUBTREE", "exchangesuperuser", "password!1", "DAVROUS2K3");


      Console.WriteLine ("******************************************");


      Console.WriteLine ("* TOTAL FINAL SIZE : " + totalSizeO + " Octets");


      totalSizeKO = totalSizeO/(double)1024;


      totalSizeKO = Math.Ceiling(totalSizeKO);


      Console.WriteLine ("* TOTAL FINAL SIZE : " + totalSizeKO + " KO");


      Console.WriteLine ("******************************************");


      Console.ReadLine();


}


Pour terminer, voici le résultalt sur le serveur Exchange 2003 vu plus haut:



Le résultat est bien identique.


-= David =-


 

Comments (0)

Skip to main content