2

I am creating personal site in office 365 using csom as follows

private void createPersonalSite()
        {
            try
            {
                //using (SPSite site = new SPSite("Site URL"))
                //{
                //SPServiceContext context = SPServiceContext.GetContext(site);
                var targetSite = new Uri("https://test/sites/18thFeb");
                var securePassword = new SecureString();
                foreach (char c in adminPassword)
                    securePassword.AppendChar(c);

                adminUserId = "yogesh@test.com";
                var onlineCredentials = new SharePointOnlineCredentials(adminUserId, securePassword);

                ClientContext clientContext = new ClientContext("https://test/sites/18thFeb");
                clientContext.Credentials = onlineCredentials;

                //Get user profile
                //// Get the PeopleManager object and then get the target user's properties.
                //Microsoft.SharePoint.Client.UserProfiles.PeopleManager peopleManager = new Microsoft.SharePoint.Client.UserProfiles.PeopleManager(clientContext);
                //Microsoft.SharePoint.Client.UserProfiles.PersonProperties personProperties = peopleManager.GetPropertiesFor("domainName\\userName");

                //personProperties.UserProfileProperties.

                Microsoft.SharePoint.Client.UserProfiles.ProfileLoader loader = Microsoft.SharePoint.Client.UserProfiles.ProfileLoader.GetProfileLoader(clientContext);
                Microsoft.SharePoint.Client.UserProfiles.UserProfile profile = loader.GetUserProfile();

                Microsoft.SharePoint.Client.Site personalSite = profile.PersonalSite;

                clientContext.Load(personalSite);
                clientContext.ExecuteQuery();

                // Let's check if the site already exists
                if (personalSite.ServerObjectIsNull.Value)
                {
                    // Let's queue the personal site creation using oob timer job based approach
                    // Using async mode, since end user could go away from browser, you could do this using oob web part as well
                    profile.CreatePersonalSiteEnque(true);
                    //clientContext.ExecuteQuery();
                }

            }
            catch
            {
                int a = 10;
            }
        }

The above code works fine for user yogesh and not for others. Yogesh is able to create My Site. Only yogesh is having admin rights. I want to create my site for all users by taking yogesh credential. Is there any way to do this ? Can you please provide me any code or link through which I can resolve the above issue ?

Shailesh Jaiswal
  • 3,606
  • 13
  • 73
  • 124

1 Answers1

0

You need to set the admin account as the SiteCollectionAdminstrator. In PowerShell, it would look like this:

Set-SPOUser -Site $fullPath -LoginName $o365login -IsSiteCollectionAdmin $true

Source: Barracuda setup guide for OneDrive Permissions: https://techlib.barracuda.com/bbs/onedriveadminpermissions

Edit: I haven't found a solution for C# that doesn't require the target user's password, so I'm going to wrap the Set-SPOUser PowerShell cmdlet. More to follow...

QuickDanger
  • 1,032
  • 11
  • 18