SharePoint Online: Get All Lists and Libraries using PowerShell

While working with SharePoint online, you may have to iterate through all lists in a site. Here is the PowerShell script to get all lists from SharePoint online site.

SharePoint Online: PowerShell to Get All Lists 
Here is the PowerShell script to get all lists and libraries from given SharePoint online site
#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"
  
#Variables for Processing
$SiteUrl = "https://crescent.sharepoint.com/sites/sales"
$UserName="salaudeen@crescent.com"
$Password ="Password goes here"
 
#Setup Credentials to connect
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,(ConvertTo-SecureString $Password -AsPlainText -Force))

Try { 
    #Set up the context
    $Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl) 
    $Context.Credentials = $credentials

    #sharepoint online powershell get all lists
    $Lists = $Context.web.Lists
    $Context.Load($Lists)
    $Context.ExecuteQuery()

    #Iterate through each list in a site   
    ForEach($List in $Lists)
    {
        #Get the List Name
        Write-host $List.Title
    }
}
catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

SharePoint Online: PowerShell Script to Iterate through all lists and libraries in a site collection
Now, Lets make this code into a re-usable function and get list and library from all sites and subsites of given site.
#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"
  
#Variables for Processing
$SiteUrl = "https://crescent.sharepoint.com/sites/sales"
$UserName="salaudeen@crescent.com"
$Password ="Password goes here"
 
#Setup Credentials to connect
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,(ConvertTo-SecureString $Password -AsPlainText -Force))

Try {
    #Function to Get all lists from the web
    Function Get-SPOList($Web)
    {
        #Get All Lists from the web
        $Lists = $Web.Lists
        $Context.Load($Lists)
        $Context.ExecuteQuery()

        #Get all lists from the web   
        ForEach($List in $Lists)
        {
            #Get the List Name
            Write-host $List.Title
        }
    }

    #Function to get all webs from given URL
    Function Get-SPOWeb($WebURL) 
    {
        #Set up the context
        $Context = New-Object Microsoft.SharePoint.Client.ClientContext($WebURL)
        $Context.Credentials = $Credentials

        $Web = $context.Web
        $Context.Load($web)
        #Get all immediate subsites of the site
        $Context.Load($web.Webs)  
        $Context.executeQuery()
 
        #Call the function to Get Lists of the web
        Write-host "Processing Web :"$Web.URL
        Get-SPOList $Web
 
        #Iterate through each subsite in the current web
        foreach ($Subweb in $web.Webs)
        {
            #Call the function recursively to process all subsites underneaththe current web
            Get-SPOWeb($SubWeb.URL)
        }
    }

    #Call the function to get all sites
    Get-SPOWeb $SiteUrl
}
catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}
Script Output:
powershell to get all lists in sharepoint online

PnP PowerShell to Get All Lists and Libraries in a Site Collection
Let's get all Lists and Libraries Inventory of All Sites in a Site Collection and Export it to CSV file using Pnp-PowerShell.
#Function to Get Lists and Libraries of a web
Function Get-SPOSiteInventory([Microsoft.SharePoint.Client.Web]$Web)
{
    Write-host -f Yellow "Getting Lists and Libraries from site:" $Web.URL

    #Get all lists and libraries
    $SiteInventory= @()
    $Lists= Get-PnPList -Web $Web
    foreach ($List in $Lists)
    {
        $Data = new-object PSObject
        $Data | Add-member NoteProperty -Name "Site Name" -Value $Web.Title
        $Data | Add-member NoteProperty -Name "Site URL" -Value $Web.Url
        $Data | Add-member NoteProperty -Name "List Title" -Value $List.Title
        $Data | Add-member NoteProperty -Name "List URL" -Value $List.RootFolder.ServerRelativeUrl
        $Data | Add-member NoteProperty -Name "List Item Count" -Value $List.ItemCount
        $Data | Add-member NoteProperty -Name "Last Modified" -Value $List.LastItemModifiedDate
        $SiteInventory += $Data
    }

    #Get All Subwebs
    $SubWebs = Get-PnPSubWebs -Web $Web
    Foreach ($Web in $SubWebs)
    {
        $SiteInventory+= Get-SPOSiteInventory -Web $Web
    }
    Return $SiteInventory
}

#Config Variables
$SiteURL = "https://crescenttech.sharepoint.com"
$CSVFile = "C:\temp\SiteData.csv"

#Get Credentials to connect
$Cred = Get-Credential

Try { 
    #Connect to PNP Online
    Connect-PnPOnline -Url $SiteURL -Credentials $Cred

    #Get the Root Web
    $Web = Get-PnPWeb

    #Call the function and export results to CSV file
    Get-SPOSiteInventory -Web $Web | Export-CSV $CSVFile -NoTypeInformation
}
Catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}
To get all document libraries in SharePoint Online using PowerShell, use: SharePoint Online: PowerShell to List All Document Libraries
SharePoint Online: Get All Lists and Libraries using PowerShell SharePoint Online: Get All Lists and Libraries using PowerShell Reviewed by Salaudeen Rajack on August 22, 2015 Rating: 5

8 comments:

  1. Hi Salaudeen,

    For SharePoint on-premises, Can you publish another Powershell script to Iterate through all lists and libraries in Web Application and site collection level (Output like CSV file).

    Thanks,
    SV
    PowerShell Script

    ReplyDelete
  2. HI,
    I am getting authentication Error message ..I am ensured that i have entered correct user name and password and MFA is disabled. Please let me know how to resolve the issue .
    Connect-SPOService : The sign-in name or password does not match one in the Microsoft account system.
    At D:\koti\Scripts\sample3.ps1:8 char:1
    + Connect-SPOService -Url $turl -Credential $credential
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Connect-SPOService], IdcrlException
    + FullyQualifiedErrorId : Microsoft.SharePoint.Client.IdcrlException,Microsoft.Online.SharePoint.PowerShell.ConnectSPOService

    ReplyDelete
    Replies
    1. You can't authenticate by hard-coding credentials if MFA is enabled for the Account. So, just remove the "-credentials" parameter and run the script, which prompts for login prompt that's MFA aware!

      E.g: Connect-SPOService -Url $SiteURL

      Delete
  3. Error: WARNING: A newer version of PnP PowerShell is available: 3.10.1906.0. Consider upgrading.
    Error: Cannot process argument transformation on parameter 'Web'. Cannot convert the "Microsoft.SharePoint.Client.Web" value of type "Microsoft.SharePoint.Client.Web" to
    type "Microsoft.SharePoint.Client.Web".

    ReplyDelete
    Replies
    1. Use: Update-Module SharePointPnPPowerShellOnline to update the PnP Module for SharePoint Online!

      Delete
    2. I'm having the same issue and I'm using the latest version of PnP Module.

      Did you manage to find a solution?

      Delete
  4. Hello. I'm getting the same 'Error Generating Site Permission Report! Cannot process argument transformation on parameter 'Web'. Cannot convert the "Microsoft.SharePoint.Client.Web" value of type "Microsoft.SharePoint.Client.Web" to type "Microsoft.SharePoint.Client.Web"'. Update-Module SharePointPnPPowerShellOnline didn't work. Did you solve this?? Thank u very much.

    ReplyDelete

Please Login and comment to get your questions answered!

Powered by Blogger.