Skip to main content

Method to provision personal sites and OneDrive for Business for multiple users in Office365

As part of new employee workflow from within the identity management we needed to pre-provision Personal sites and OneDrive for Business.

After doing a quick research, I found the following article on the #msdn

https://msdn.microsoft.com/en-us/library/office/jj163783.aspx

which describes how using CSOM one can achieve the task.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.UserProfiles;

namespace CreatePersonalSiteBulkConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            string userName = "administrator@contoso.onmicrosoft.com";
            string passwordStr = "password";
            string serverUrl = "https://contoso-admin.sharepoint.com/";

            using (var clientContext = new ClientContext(serverUrl))
            {
                SecureString password = new SecureString();
                Array.ForEach(passwordStr.ToCharArray(), c => password.AppendChar(c));

                var credentials = new SharePointOnlineCredentials(userName, password);

                clientContext.Credentials = credentials;

                var web = clientContext.Web;
                clientContext.Load(web);
                clientContext.ExecuteQuery();
                ProfileLoader loader = ProfileLoader.GetProfileLoader(clientContext);

                if (loader == null)
                {
                    throw new InvalidOperationException("Failed to get ProfileLoader");
                }

                string[] userEmails = { "usera@contoso.onmicrosoft.com", "userb@contoso.onmicrosoft.com" };
                loader.CreatePersonalSiteEnqueueBulk(userEmails);
                loader.Context.ExecuteQuery();
            }
        }
    }
}


As I want to mention very important requirements for using this code as the #msdn documentation does not say clearly.
#The caller of the api must have a sharepoint user profile (means a sharepoint licenses assigned)
#The caller of the api must be "Global Admin"
#The machine from where the api would invoked must have following components installed on it;
sharepointclientcomponents_16-4002-1211_x64-en-us.msi
https://www.microsoft.com/en-us/download/details.aspx?id=42038



















Comments