Simile allo script precedente Elenco site collection con spazio occupato e data ultima modifica, solo che fa anche una stima dello spazio occupato dai singoli web (SPWeb):

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;

namespace ElencoSiteCollectionWeb
{
  class Program
  {
    private static System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(1040);

    static void Main(string[] args)
    {
      string url = args[0];
      Console.WriteLine("Sito: " + url);
      SPUserToken ut = null;

      using (SPSite site = new SPSite(url))
      {
        ut = site.SystemAccount.UserToken;
      }
      using (SPSite site = new SPSite(url, ut))
      {
        Console.WriteLine("User:" + site.RootWeb.CurrentUser);
        site.CatchAccessDeniedException = true;
        SPWebApplication wApp = site.WebApplication;
        foreach (SPSite s in wApp.Sites)
        {
          ////s.CatchAccessDeniedException = false;
          //stampo i dati della site collection
          string msg = "Site;" + s.ServerRelativeUrl;
          try
          {
            //trovo la data di ultima modifica del sito
            DateTime dt = DateTime.MinValue;
            if (s.LastContentModifiedDate > dt)
              dt = s.LastContentModifiedDate;
            if (s.LastSecurityModifiedDate > dt)
              dt = s.LastSecurityModifiedDate;

            msg += ";" + dt.ToString("yyyy-MM-dd HH:mm:ss");
            msg += ";" + (s.Usage.Storage / 1048576.0).ToString("0.0", ci);
            Console.WriteLine(msg);
            ShowWeb(s);
          }
          catch (Exception ex)
          {
            Console.WriteLine("Site;" + ex.Message);
          }
          finally
          {
            s.Dispose();
          }
        }
      }
    }

    private static void ShowWeb(SPSite site)
    {
      foreach (SPWeb w in site.AllWebs)
      {
        string msg = "Web;" + w.ServerRelativeUrl;
        try
        {
          DateTime dt = w.LastItemModifiedDate;
          msg += ";" + dt.ToString("yyyy-MM-dd HH:mm:ss");
          long size = CalculateWebSpace(w);
          msg += ";" + (size / 1048576.0).ToString("0.0", ci);
          Console.WriteLine(msg);
        }
        catch (Exception ex)
        {
          Console.WriteLine("Web;" + ex.Message);
        }
        finally
        {
          w.Dispose();
        }
      }
    }

    //calcolo approssimativo
    private static long CalculateWebSpace(SPWeb web)
    {
      const long DEFAULTSPACEFORLISTITEM = 255; //approssimazione

      long size = 0;
      foreach (SPList list in web.Lists)
      {
        foreach (SPListItem item in list.Items)
        {
          size += DEFAULTSPACEFORLISTITEM;
          if (list.BaseType == SPBaseType.DocumentLibrary)
          {
            //document library
            size += item.File.Length;
          }
          else if(list.EnableAssignToEmail==true)
          {
            //vedo se ho degli allegati
            SPAttachmentCollection attColl = item.Attachments;
            if (attColl != null && attColl.Count > 0)
            {
              foreach (string  fileName in attColl)
              {
                string fileUrl = attColl.UrlPrefix + fileName;
                SPFile attachFile = web.GetFile(fileUrl);
                size += attachFile.Length;
              }
            }
          }
        }

      }
      return size;
    }
  }
}
Tags:
C#236 SharePoint498 SharePoint 2007218
Potrebbe interessarti anche: