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
We can create multiple document libraries just by wrapping the script into a re-usable function and call the function with an array of document libray's 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 -UseWebLogin

#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
    }
}

2 comments:

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

    ReplyDelete

Please Login and comment to get your questions answered!

Powered by Blogger.