Wednesday, 22 February 2017

SharePoint Online - Create Libraries automatically

A - OBJECTIVE: 

During data migration to move files from local drives to SharePoint Online, you may need to create a big number of libraries to anticipate the list (soft) threshold of 5,000 items.

B - PROBLEMS :

Creating libraries manually is tedious & a script to automate the process will be shared to ease your work.

C - SOLUTION:

Powershell script can be used at your own PC to create libraries automatically at any SharePoint Online site.

D - SOURCE CODE or BENCHMARK:

Pre-requisites:
  • SharePoint DLLs saved at your PC & loaded to the script session.
  • Source File which predefines all libraries in each row in the format of "Internal Name, External or Display Library Name".
  • SharePoint Online Management Shell must be installed at your PC.
What you need to do is:
  1. Load the neccessary components
  2. # Load DLLs
    Add-Type -Path "D:\SharePoint\PowerShell\SPO-DLL\Microsoft.SharePoint.Client.dll"
    Add-Type -Path "D:\SharePoint\PowerShell\SPO-DLL\Microsoft.SharePoint.Client.Runtime.dll"
    Add-Type -Path "D:\SharePoint\PowerShell\SPO-DLL\Microsoft.SharePoint.Client.UserProfiles.dll"
     
    # Source File to be synced from SharePoint On-Prem to Online
    $sourcefile = "D:\Projects\Libraries.txt"
    
  3. Load your SharePoint tenant
  4. #variables that needs to be set before starting the script
    $siteURL = "https://anthonynhn.sharepoint.com/sites/fat/cs"
    $adminUrl = "https://anthonynhn-admin.sharepoint.com"
    $userName = "admin@anthonynhn.onmicrosoft.com"
    # Let the user fill in their password in the PowerShell window
    $password = Read-Host "Please enter the password for $($userName)" -AsSecureString
    
  5. Initialize the creation task
  6. # set SharePoint Online credentials
    $SPOCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userName, $password)  
    
    # Creating client context object
    $contextLocal = New-Object Microsoft.SharePoint.Client.ClientContext($siteURL)
    $contextLocal.credentials = $SPOCredentials
    $contextLocal.ExecuteQuery() 
    
    $listTemplate = 101 #doclib
    
    Foreach ($line in [System.IO.File]::ReadLines($sourcefile)) {
        $lib = New-Object Microsoft.SharePoint.Client.ListCreationInformation
     $libInput = $line -split ',';
     
     # set the Internal Name
        $lib.Url = $libInput[0]
     
     # set the Lib Title
     $lib.title = $libInput[1]
     
        $lib.TemplateType = $listTemplate
        $list = $contextLocal.web.lists.add($lib)
        $contextLocal.load($list)
        #send the request containing all operations to the server
        try{
            $contextLocal.executeQuery()
            write-host "info: Created $($listTitle)" -foregroundcolor green
        }
        catch{
            write-host "info: $($_.Exception.Message)" -foregroundcolor red
        }  
    }