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:

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

Connection and Data Retrieval

Main Site Pages

Subsite Pages

Export to CSV

Error Handling

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