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 various ways. By using PowerShell, you can create multiple document libraries in no time, and this can be a great way to provision document libraries in bulk at once.
How to create multiple document libraries in SharePoint Online? We can create multiple document libraries 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
You can download the CSV template here:
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] $LibraryName,
[Parameter(Mandatory=$False)] [String] $Description,
[Parameter(Mandatory=$False)] [Switch] $ShowOnQuickLaunch
)
Try {
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
$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($Line.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 library
If($ShowOnQuickLaunch -eq $True)
{
CreateSPO-DocumentLibrary -LibraryName $Line.LibraryName -Description $Line.Description -ShowOnQuickLaunch
}
Else
{
CreateSPO-DocumentLibrary -LibraryName $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 specific properties of the document library, such as: Set versioning, list experience, and permissions! The CSV file has two columns: LoginID and DisplayName.
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
}
}
It seems line 51 is overriding the URLS in my CSV file – I know nothing of programming/scripting so I am not sure how to make the script read the URLS from the file instead.
I’ve updated the post with the CSV template. You can just change the SiteURL, LibraryName and other parameters in the CSV and use the PowerShell script to create document libraries from the CSV.
Thank you Saludeen! Do you have another version of this to create document libraries for hundreds of different subsites? I used your script for creating the subsites and it saved me days! I created 1800 subsites in a matter of hours. But now I need to create doc libs for all of these sites.
You can use the CSV file with different URLs and create a document library on the specific subsite.
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…
You can either use the PnP PowerShell script provided in this post or refer this post to use MFA with CSOM How to Connect to SharePoint Online using PowerShell with MFA (Multi-factor Authentication)
I have configured MFA in my tenant, and need help in authenticating using MFA.
Refer here: Connect to SharePoint Online using PowerShell with MFA (Multi-factor Authentication)
Hi,
Do you have a solution to creating multiple document libraries from a CSV on Sharepoint On Prem 2016?
I need to create multiple Custom lists, document libraries, Picture libraries, Tasks, etc. Please help.
To bulk create lists from csv file, use: How to Create Multiple list in SharePoint Online using PowerShell?