SharePoint Online: Create Multiple Document Libraries using PowerShell

Requirement: Create multiple document libraries in SharePoint Online using PowerShell.

PowerShell to Create Multiple Document Libraries in SharePoint Online

Microsoft SharePoint is a versatile platform that can be used to manage and share data in a variety of ways. By using PowerShell, you can create multiple document libraries in no time. This can be a great way to provision document libraries in bulk at once.

How to create multiple document libraries in SharePoint Online? Well, We can create multiple document libraries just by wrapping the script into a re-usable function and calling the function with an array of document libraries to create.

#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
     
#Function to Create a SharePoint Online document library
Function CreateSPO-DocumentLibrary()
{

 [cmdletbinding()]

    param
    (
        [Parameter(Mandatory=$True,ValueFromPipeline)] [String[]] $LibraryNames,
        [Parameter(Mandatory=$False)] [String] $Description
    )    
    Try {
        #Create Each Document Library
        ForEach($LibraryName in $LibraryNames)
        {
            Write-host -f Yellow "`nEnsuring Document Library '$LibraryName'"
         
            #Get All Existing Lists from the web
            $Lists = $Web.Lists
            $Ctx.Load($Lists)
            $Ctx.ExecuteQuery()
 
            #Check if Library name doesn't exist already
            If(!($Lists.Title -contains $LibraryName))
            {
                #Create Document Library
                $ListInfo = New-Object Microsoft.SharePoint.Client.ListCreationInformation
                $ListInfo.Title = $LibraryName
                $ListInfo.Description =  $Description
                $ListInfo.TemplateType =  [Microsoft.SharePoint.Client.ListTemplateType]::DocumentLibrary 
                $Web.Lists.Add($ListInfo) | Out-Null
                $Ctx.ExecuteQuery()
  
                write-host  -f Green "`tNew Document Library '$LibraryName' has been created!"
            }
            Else
            {
                Write-Host -f Magenta "`tA Document Library '$LibraryName' Already exists!"
            }
        }
    }
    Catch {
        write-host -f Red "`tError:" $_.Exception.Message
    }
}
 
#Set Parameters
$SiteURL= "https://crescent.sharepoint.com/sites/marketing"
 
#Get Credentials to connect
$Cred = Get-Credential
 
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
   
#Get the web from URL
$Web = $Ctx.web
$Ctx.Load($Web)
$Ctx.executeQuery()
 
#Call the function to create document libraries
CreateSPO-DocumentLibrary -LibraryNames @("Document Library 1", "Document Library 2", "Document Library 3", "Document Library 4")    

Create Multiple Document Libraries in SharePoint Online using PowerShell

What if you want to add some additional parameters to the bulk document library script, such as “Quick Launch”? Here is my CSV file with document library details

create multiple document libraries sharepoint online powershell

Let’s create document libraries from a CSV file using PowerShell:

#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
    
#Function to Create a SharePoint Online document library
Function CreateSPO-DocumentLibrary()
{

[cmdletbinding()]

    param
    (
        [Parameter(Mandatory=$True,ValueFromPipeline)] [String[]] $LibraryNames,
        [Parameter(Mandatory=$False)] [String] $Description,
        [Parameter(Mandatory=$False)] [Switch] $ShowOnQuickLaunch
    )    
    Try {
        #Create Each Document Library
        ForEach($LibraryName in $LibraryNames)
        {
            Write-host -f Yellow "`nEnsuring Document Library '$LibraryName'"
        
            #Get All Existing Lists from the web
            $Lists = $Web.Lists
            $Ctx.Load($Lists)
            $Ctx.ExecuteQuery()

            #Check if Library name doesn't exist already
            If(!($Lists.Title -contains $LibraryName))
            {
                #Set Quick Launch Option
                If($ShowOnQuickLaunch.IsPresent)
                {
                    $QuickLaunchOption = [Microsoft.SharePoint.Client.QuickLaunchOptions]::On
                }
                Else
                {
                    $QuickLaunchOption = [Microsoft.SharePoint.Client.QuickLaunchOptions]::Off
                }

                #Create Document Library
                $ListInfo = New-Object Microsoft.SharePoint.Client.ListCreationInformation
                $ListInfo.Title = $LibraryName
                $ListInfo.Description =  $Description
                $ListInfo.TemplateType =  [Microsoft.SharePoint.Client.ListTemplateType]::DocumentLibrary 
                $List = $Web.Lists.Add($ListInfo)
                $List.OnQuickLaunch = $QuickLaunchOption
                $List.Update()
                $Ctx.ExecuteQuery()
 
                write-host  -f Green "`tNew Document Library '$LibraryName' has been created!"
            }
            Else
            {
                Write-Host -f Magenta "`tA Document Library '$LibraryName' Already exists!"
            }
        }
    }
    Catch {
        write-host -f Red "`tError:" $_.Exception.Message
    }
}

#Set Parameters
$SiteURL= "https://crescent.sharepoint.com/sites/marketing"
$CSVFilePath = "C:\Temp\DocLibs.csv"

#Get Credentials to connect
$Cred = Get-Credential

#Get the CSV file
$CSVFile = Import-Csv $CSVFilePath 

#Read CSV file and create a document library
ForEach($Line in $CSVFile)
{
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
  
    #Get the web from URL
    $Web = $Ctx.web
    $Ctx.Load($Web)
    $Ctx.executeQuery()
    
    #Get the ShowOnQuickLaunch option
    $ShowOnQuickLaunch = [System.Convert]::ToBoolean($Line.ShowOnQuickLaunch)

    #Call the function to create document libraries
    If($ShowOnQuickLaunch -eq $True)
    {
        CreateSPO-DocumentLibrary -LibraryNames $Line.LibraryName -Description $Line.Description -ShowOnQuickLaunch
    }
    Else
    {
        CreateSPO-DocumentLibrary -LibraryNames $Line.LibraryName -Description $Line.Description
    }
}
    


Bulk Create Document Libraries with PnP PowerShell

This time, My requirement is to create multiple document libraries from a CSV file and set certain properties of the document library, such as: Set versioning, list experience, and permissions! The CSV file has two columns: LoginID and DisplayName.

create multiple sharepoint online document libraries from CSV file powershell

Use this PowerShell to bulk create document libraries from a CSV file input.

#Set Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/p/"
$CSVFilePath = "C:\Users\salaudeen\Documents\Users.csv"
 
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive

#Get the CSV file
$CSVFile = Import-Csv $CSVFilePath
 
#Read CSV file and create document library
ForEach($Line in $CSVFile)
{
    Try {
        #create document library
        Write-host -f Yellow "Creating Document Library:"$Line.DisplayName
        New-PnPList -Title $Line.DisplayName -Template DocumentLibrary -Url $Line.LoginID -ErrorAction Stop

        #Set Library Properties
        Set-PnPList -Identity $Line.DisplayName -EnableVersioning $True -EnableMinorVersions $True -CopyRoleAssignments:$False -BreakRoleInheritance -ListExperience NewExperience
        $Library  = Get-PnPList -Identity $Line.DisplayName

        #Exclude from Search Results
        $Library.NoCrawl = $True
        $Library.Update()

        #Grant permission on List to User
        $UserID = $Line.LoginID+"@crescent.com"
        Set-PnPListPermission -Identity $Line.DisplayName -AddRole "Full Control" -User $UserID

        Write-host -f Green "`tCreated Document Library:"$Line.DisplayName
    }
    Catch {
        write-host -f Red "`tError:" $_.Exception.Message
    }
}

Salaudeen Rajack

Salaudeen Rajack is a SharePoint Architect with Two decades of SharePoint Experience. He loves sharing his knowledge and experiences with the SharePoint community, through his real-world articles!

7 thoughts on “SharePoint Online: Create Multiple Document Libraries using PowerShell

  • These SharePoint guides are truly wonderful, thanks for making them. Only one problem is that the script doesn’t take into account tenants with MFA and I imagine in 2021 most tenants will have MFA turned on (you truly need to do this if you haven’t already). I also know how to login to my tenant using Connect-PnPOnline -url XXXX – Interactive and also Connect-SPOService. However I cannot get the script (Create Multiple Document Libraries in SharePoint Online using PowerShell) to work because it seems to use credentials on line 69 and 79 that I haven’t figured out how to replace for MFA. I get this error:

    PS C:\Users\USRNAME\Desktop\PowerShell Scripts\sharepoint_scripts> .\CreateDocLibWQuickLaunch.ps1

    cmdlet Get-Credential at command pipeline position 1
    Supply values for the following parameters:
    Credential
    Exception calling “ExecuteQuery” with “0” argument(s): “The sign-in name or password does not match one in the
    Microsoft account system.”
    At C:\Users\USRNAME\Desktop\PowerShell Scripts\sharepoint_scripts\CreateDocLibWQuickLaunch.ps1:91 char:5
    + $Ctx.executeQuery()
    + ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : IdcrlException

    Ensuring Document Library ‘Doc Lib 9’
    Error: Exception calling “ExecuteQuery” with “0” argument(s): “The sign-in name or password does not match one in the Microsoft account system.”
    Exception calling “ExecuteQuery” with “0” argument(s): “The sign-in name or password does not match one in the
    Microsoft account system.”
    At C:\Users\USRNAME\Desktop\PowerShell Scripts\sharepoint_scripts\CreateDocLibWQuickLaunch.ps1:91 char:5
    + $Ctx.executeQuery()
    + ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : IdcrlException

    Ensuring Document Library ‘Doc Lib 10’
    Error: Exception calling “ExecuteQuery” with “0” argument(s): “The sign-in name or password does not match one in the Microsoft account system.”

    It keep complaining about line 91 char 5:
    $Ctx.executeQuery()

    Please help…

    Reply
  • I have configured MFA in my tenant, and need help in authenticating using MFA.

    Reply
  • Hi,

    Do you have a solution to creating multiple document libraries from a CSV on Sharepoint On Prem 2016?

    Reply
  • I need to create multiple Custom lists, document libraries, Picture libraries, Tasks, etc. Please help.

    Reply

Leave a Reply