SharePoint My Site Analysis Report – A Practical Business Scenario

Call from my CIO: “Salaudeen, I need the SharePoint ‘My Site’ Report with Department wise users along with their other details such as E-Mail.”

Well, E-Mail I can retrieve by querying Site Owner object, How about Department? Ah, Its available in Profile DB. Let me query that.

Here is my code:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using Microsoft.Office.Server;
using Microsoft.Office.Server.Administration;
using Microsoft.Office.Server.UserProfiles;
using System.Web;

namespace SharePoint.AdminReports
{
    class MySiteAnalysis
    {
        static void Main(string[] args)
        {

            //Get the My Site web application URL
            string site;
            string WorkEmail;
            if (args.Length == 0)
            {
                Console.WriteLine("Enter the My site URL:");
                site = Console.ReadLine();
            }
            else
            {
                site = args[0];
            }

            //objects for the CSV file generation
            StreamWriter SW;
            SW = File.AppendText("c:\\SiteOwnersReport.csv");
            //Write the CSV Header
            SW.WriteLine("Site URL, Owner Name, E-Mail, Department");

            try
            {
                SPSite tmpRoot = new SPSite(site);
                SPSiteCollection tmpRootColl = tmpRoot.WebApplication.Sites;

                //Enumerate through each site collection
                foreach (SPSite tmpSite in tmpRootColl)
                {
                    try
                    {
                        WorkEmail = tmpSite.Owner.Email;
                    }
                    catch (NullReferenceException ex1)
                    {
                        WorkEmail = string.Empty;
                    }

                    SW.WriteLine(tmpSite.Url + "," + tmpSite.Owner.LoginName + "," + WorkEmail + "," + GetDepartment(site, tmpSite.Owner.LoginName));
                }
                //Dispose the objects
                SW.Close();
                SW.Dispose();
                tmpRoot.Dispose();

            }
            catch (Exception ex)
            {
                System.Diagnostics.EventLog.WriteEntry("Site Owner Report", ex.Message);
            } 
            }


        //Method to Get the department of the Site owner
        private static string GetDepartment(string siteURL, string loginName)
        {
            string Department;
            try
            {
                
                using (SPSite site = new SPSite(siteURL))
                {
                    // if the Profile not found in Profile store, SharePoint will throw: UserNotFoundException exception
                    try
                    {
                        ServerContext context = ServerContext.GetContext(site);
                        UserProfileManager profileManager = new UserProfileManager(context);
                        UserProfile profile = profileManager.GetUserProfile(loginName);

                        //Department may or May not be associated.
                        try
                        {
                            Department = profile["Department"].Value.ToString();
                        }
                        catch (NullReferenceException ex2)
                        {
                            Department = string.Empty;
                        }
                    }
                    catch (UserNotFoundException ex3)
                    {
                        Department = "** User not Found **";
                    }
                }
            }
            catch (Exception ex4)
            {
                Department = string.Empty;
            }
            return Department;
        }
    }
}

and the code brings the Report in CSV format:

SharePoint My Site Analysis

By the way, This report also gives “Orphaned Mysites” information also. Since I’ve disabled “Site usage confirmation and deletion” feature, it resulted orphaned my sites.

Tail:
In case you don’t have dedicated web application for My Site (which is bad, in-fact) you can check the “WebTemplate” Property of SPWeb object. My Site’s web template is: “SPSPERS”

Salaudeen Rajack

Salaudeen Rajack - Information Technology Expert with Two-decades of hands-on experience, specializing in SharePoint, PowerShell, Microsoft 365, and related products. He has held various positions including SharePoint Architect, Administrator, Developer and consultant, has helped many organizations to implement and optimize SharePoint solutions. Known for his deep technical expertise, He's passionate about sharing the knowledge and insights to help others, through the real-world articles!

One thought on “SharePoint My Site Analysis Report – A Practical Business Scenario

  • Thanks Salaudeen, this was very informative, Please keep posting

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *