Generate List of SharePoint Pages and Owners Using Power Shell

Managing a large SharePoint site with thousands of pages can be daunting, especially when you need to get a detailed list of pages along with their respective owners. Automating this process with a script can save a significant amount of time and effort. In this blog, I'll walk you through a PowerShell script that does just that—fetches the list of pages and their owners, and exports the data to an Excel file for easy management.

Prerequisites

Before diving into the script, ensure you have the following:

  • PnP PowerShell Module: Install this module if you haven't already. You can do so by running.
    Install-Module -Name "PnP.PowerShell"
  • Permissions: Ensure you have the necessary permissions to access the SharePoint site and its subsites.

The PowerShell Script

Below is the PowerShell script that retrieves the pages from the SharePoint site and its subsites, then exports the information to a CSV file:

# Config Variables
$SiteURL = Read-Host "Enter Site URL"
$CSVFile = "C:\Temp\SitePages.csv"
Try {
    # Connect to PnP Online
    Connect-PnPOnline -Url $SiteURL -Interactive
    # Get subsites in SharePoint Online using PnP PowerShell
    $WebsCollection = Get-PnPSubWeb -Recurse
    $PagesDataColl = @()
    # Get pages from the main site
    $SitePages = Get-PnPListItem -List "Site Pages"
    ForEach ($Page in $SitePages) {
        $Data = New-Object PSObject -Property ([Ordered] @{
            PageName    = $Page.FieldValues.Title
            Owner       = $Page.FieldValues.Author.Email
            RelativeURL = $Page.FieldValues.FileRef
            CreatedOn   = $Page.FieldValues.Created_x0020_Date
            ModifiedOn  = $Page.FieldValues.Last_x0020_Modified
            Editor      = $Page.FieldValues.Editor.Email
            ID          = $Page.ID
        })
        $PagesDataColl += $Data
    }
    # Iterate through each subsite
    ForEach ($Web in $WebsCollection) {
        Connect-PnPOnline -Url $Web.Url -Interactive
        $SitePages = Get-PnPListItem -List "Site Pages"
        ForEach ($Page in $SitePages) {
            $Data = New-Object PSObject -Property ([Ordered] @{
                PageName    = $Page.FieldValues.Title
                Owner       = $Page.FieldValues.Author.Email
                RelativeURL = $Page.FieldValues.FileRef
                CreatedOn   = $Page.FieldValues.Created_x0020_Date
                ModifiedOn  = $Page.FieldValues.Last_x0020_Modified
                Editor      = $Page.FieldValues.Editor.Email
                ID          = $Page.ID
            })
            $PagesDataColl += $Data
        }
    }
    # Export the collected data to a CSV file
    $PagesDataColl | Export-Csv -Path $CSVFile -NoTypeInformation
}
catch {
    Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red
}

Explanation of the Script


Configuration Variables

  • $SiteURL: Prompt the user to enter the URL of the SharePoint site.
  • $CSVFile: Specify the path where the CSV file will be saved.

Connection and Data Retrieval

  • Connect to the SharePoint site using Connect-PnPOnline.
  • Retrieve the collection of subsites using Get-PnPSubWeb -Recurse.
  • Initialize an empty array $PagesDataColl to store the page data.

Main Site Pages

  • Use Get-PnPListItem -List "Site Pages" to get the list items from the "Site Pages" library.
  • Loop through each page and create a new PSObject to store its details (title, owner, URL, creation date, modification date, editor, and ID).

Subsite Pages

  • Iterate through each subsite, connect to it, and repeat the process of retrieving page data and storing it in the $PagesDataColl array.

Export to CSV

  • Export the collected data to a CSV file using Export-Csv.

Error Handling

  • The catch block captures any errors during the execution and displays an error message.

Running the Script


To execute the script

  1. Save the script to a .ps1 file.
  2. Open PowerShell with administrative privileges.
  3. Run the script by navigating to the file location and typing .\<script-name>.ps1.

Conclusion

This PowerShell script provides an efficient way to manage a large SharePoint site by automating the retrieval of page details and exporting them to an Excel file. This approach not only saves time but also ensures accuracy in data collection. Feel free to customize the script further to suit your specific requirements.
Happy scripting!

Connect with me on LinkedIn