kwizcom banner advertisement

SharePoint Online: Get All Documents Inventory in a Site using PowerShell

Requirement: List All Documents in SharePoint Online Site Collection using PowerShell

SharePoint Online PowerShell to Get All Documents 
Here is the PowerShell to list all documents from document libraries in SharePoint Online site collection and export to CSV.
#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 Generate Report on all documents in a SharePoint Online Site Collection
Function Get-SPODocumentInventory($SiteURL)
{
    Try {
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials
  
        #Get the web from given URL and its subsites
        $Web = $Ctx.web
        $Ctx.Load($Web)
        $Ctx.Load($Web.Lists)
        $Ctx.Load($web.Webs)
        $Ctx.executeQuery()

        #Arry to Skip System Lists and Libraries
        $SystemLists =@("Converted Forms", "Master Page Gallery", "Customized Reports", "Form Templates", "List Template Gallery", "Theme Gallery",
               "Reporting Templates", "Solution Gallery", "Style Library", "Web Part Gallery","Site Assets", "wfpub", "Site Pages", "Images")
    
        Write-host -f Yellow "Processing Site: $SiteURL"

        #Filter Document Libraries to Scan 
        $Lists = $Web.Lists | Where {$_.BaseType -eq "DocumentLibrary" -and $_.Hidden -eq $false -and $SystemLists -notcontains $_.Title}
        #Loop through each document library
        Foreach ($List in $Lists)
        {
            #Get All Files of from the document library - Excluding Folders
            $Query =  New-Object Microsoft.SharePoint.Client.CamlQuery
            $Query.ViewXml = "<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>0</Value></Eq></Where><OrderBy><FieldRef Name='ID' /></OrderBy></Query></View>"
            $ListItems=$List.GetItems($Query)
            $Ctx.Load($ListItems)
            $Ctx.ExecuteQuery() 

            Write-host -f Cyan "`t Processing Document Library: '$($List.Title)' with $($List.ItemCount) Item(s)"

            $DocumentInventory = @()
            #Iterate through each file and get data
            Foreach($Item in $ListItems)
            {
                $File = $Item.File
                $Ctx.Load($File)
                $Ctx.ExecuteQuery()

                $DocumentData = New-Object PSObject
                $DocumentData | Add-Member NoteProperty SiteURL($SiteURL)
                $DocumentData | Add-Member NoteProperty DocLibraryName($List.Title)
                $DocumentData | Add-Member NoteProperty FileName($File.Name)
                $DocumentData | Add-Member NoteProperty FileURL($File.ServerRelativeUrl)
                $DocumentData | Add-Member NoteProperty CreatedBy($Item["Author"].Email)
                $DocumentData | Add-Member NoteProperty CreatedOn($File.TimeCreated)
                $DocumentData | Add-Member NoteProperty ModifiedBy($Item["Editor"].Email)
                $DocumentData | Add-Member NoteProperty LastModifiedOn($File.TimeLastModified)
                $DocumentData | Add-Member NoteProperty Size-KB([math]::Round($File.Length/1KB))
                      
                #Add the result to an Array
                $DocumentInventory += $DocumentData  
            }            
            #Export the result to CSV file
            $DocumentInventory | Export-CSV $ReportOutput -NoTypeInformation -Append
        }
 
        #Iterate through each subsite of the current web and call the function recursively
        ForEach ($Subweb in $Web.Webs)
        {
            #Call the function recursively to process all subsites underneaththe current web
            Get-SPODocumentInventory($Subweb.url)
        }
    }
    Catch {
        write-host -f Red "Error Generating Document Inventory!" $_.Exception.Message
    }
}
 
#Config Parameters
$SiteCollURL="https://crescent.sharepoint.com"
$ReportOutput="C:\temp\DocInventory.csv"
 
#Setup Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
 
#Delete the Output Report, if exists
if (Test-Path $ReportOutput) { Remove-Item $ReportOutput }
 
#Call the function 
Get-SPODocumentInventory $SiteCollURL
Change the site collection URL and report output path in the script and run:
sharepoint online powershell list all documents

Here is the result of PowerShell to list all documents
sharepoint online powershell get all documents

Here is my another post written for SharePoint On-Premises to get all documents from SharePoint document library: Get All Documents Inventory in SharePoint using PowerShell
SharePoint Online: Get All Documents Inventory in a Site using PowerShell SharePoint Online: Get All Documents Inventory in a Site using PowerShell Reviewed by Salaudeen Rajack on March 16, 2018 Rating: 5

No comments:

Please Login and comment to get your questions answered!

Powered by Blogger.