C#
Remove “EveryOneUser” from One Drive

Remove “EveryOneUser” from One Drive

The below snippet helps you to remove EveryOneUser object from all the My Sites of your SharePoint Farm. You can also modify to remove a specific user or group.

My requirement is to disable access for all My Site folders inclusing Shared With EveryOne to “EveryOneUser” user object

This works for SharePoint Online and On-Prem as I have implemented CSOM.

using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.UserProfiles;
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace SPS.RemoveEveryOneUserObject
{
    class Program
    {
        static EventLog appLog = null;
        static void Main(string[] args)
        {
            Stopwatch stopwatch = new Stopwatch();
            var config = new Configurations();
            using (appLog = new EventLog { Source = "SPS.RemoveEveryOneUserObject" })
            {
                try
                {
                    stopwatch.Start();
                    appLog.WriteEntry("Starting Remove Every One User Object job", EventLogEntryType.Information);
                    List<string> siteUrlCollection = GetSiteUrlCollection(config);
                    appLog.WriteEntry(string.Format("Total site count {0}", siteUrlCollection.Count), EventLogEntryType.Information);
                    foreach (string siteUrl in siteUrlCollection)
                    {
                        //string siteUrl = "https://mysite/personal/ridhvi/";
                        try
                        {
                            using (ClientContext clientContext = new ClientContext(siteUrl))
                            {
                                clientContext.Credentials = config.NetworkCredential;
                                List documentLibrary = clientContext.Web.Lists.GetByTitle(config.DocumentLibraryName);
                                clientContext.Load(documentLibrary);                                clientContext.Load(documentLibrary.RootFolder);                                clientContext.Load(documentLibrary.RootFolder.Folders);                                clientContext.Load(documentLibrary.RootFolder.Files);
                                clientContext.ExecuteQuery();
                                string folderServerRelativeUrl_SharedwithEveryone = string.Format("{0}Documents/Shared with Everyone", siteUrl.Replace(config.ConfigurationSiteUrl, string.Empty));
                                ResetPermissions(clientContext, documentLibrary.RootFolder.Folders, folderServerRelativeUrl_SharedwithEveryone);
                            }
                        }
                        catch (Exception ex)
                        {
                            appLog.WriteEntry(string.Format("Failed for site : {0},{1}", siteUrl, ex.Message), EventLogEntryType.Warning);
                        }
                    }
                    stopwatch.Stop();
                    appLog.WriteEntry(string.Format("Job completed, Time elapsed : {0}", stopwatch.Elapsed), EventLogEntryType.Information);
                }
                catch (Exception ex)
                {
                    appLog.WriteEntry(ex.Message + "\n" + ex.StackTrace, EventLogEntryType.Error);
                }
            }
        }
        private static void ResetPermissions(ClientContext clientContext, FolderCollection folderCollection, string folderServerRelativeUrl)
        {
            foreach (Folder _folder in folderCollection)
            {
                if (_folder.ServerRelativeUrl.Contains(folderServerRelativeUrl))
                {
                    clientContext.Load(_folder.Files);
                    clientContext.ExecuteQuery();
                    FileCollection fileCol = _folder.Files;
                    foreach (File _file in fileCol)
                    {
                        clientContext.Load(_file, item => item.ListItemAllFields.HasUniqueRoleAssignments);
                        clientContext.ExecuteQuery();
                        if (_file.ListItemAllFields.HasUniqueRoleAssignments)
                        {                            Console.WriteLine(_file.ServerRelativeUrl);
                            //#Reset Folder Permissions                            _file.ListItemAllFields.ResetRoleInheritance();
                            clientContext.ExecuteQuery();
                        }
                    }
                    clientContext.Load(_folder, item => item.ListItemAllFields.HasUniqueRoleAssignments);
                    clientContext.ExecuteQuery();
                    if (_folder.ListItemAllFields.HasUniqueRoleAssignments)
                    {
                        //#Reset Folder Permissions                        _folder.ListItemAllFields.ResetRoleInheritance();
                        clientContext.ExecuteQuery();
                    }
                    clientContext.Load(_folder.Folders);
                    clientContext.ExecuteQuery();
                    ResetPermissions(clientContext, _folder.Folders, folderServerRelativeUrl);
                }
            }
        }
        private static List<string> GetSiteUrlCollection(Configurations config)
        {
            List<string> siteUrlCollection = new List<string>();
            using (ClientContext clientContext = new ClientContext(config.ConfigurationSiteUrl))
            {
                clientContext.Credentials = config.NetworkCredential;
                clientContext.Load(clientContext.Web);
                Web web = clientContext.Web;
                clientContext.Load(web);
                clientContext.Load(web.SiteUsers);
                clientContext.ExecuteQuery();
                UserCollection users = web.SiteUsers;
                PeopleManager peopleManager = new PeopleManager(clientContext);
                foreach (User user in users)
                {
                    try
                    {
                        PersonProperties personProperties = peopleManager.GetPropertiesFor(user.LoginName);
                        clientContext.Load(personProperties, p => p.AccountName, p => p.PersonalUrl);
                        clientContext.ExecuteQuery();
                        if (!personProperties.PersonalUrl.Contains("?accountname="))
                        {                            siteUrlCollection.Add(personProperties.PersonalUrl);
                        }
                    }
                    catch
                    {
                        //"Throws Exception for invalid users"; }
                    }
                }
                return siteUrlCollection;
            }
        }
    }
}

Happy SharePointing!!

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.