Skip to main content

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

Comments

Popular posts from this blog

Identity client runtime library (IDCRL) did not get a response from the login server.

Recently I was doing some testing with a background PowerShell and encountered a weird error. “Identity client runtime library (IDCRL) did not get a response from the login server”. The error that you might encounter while working with PowerShell. This error is very misleading when it comes to identifying what could go wrong. After doing quite a good amount of research below are the probable causes for the error. Invalid Credentials MFA (Multi-Factor Authentication) Manage security defaults. Solutions Invalid Credentials Check if your credentials are wrong. Especially if you are using variables. MFA (Multi-Factor Authentication) Check if MFA is enabled on the account which you are using. These only affect you badly if you are developing PowerShell for a background Job. Go to Microsoft 365 admin center Users -> Active users -> Select the user -> Manage multifactor authentication -> Select the user -> Disable multi-factor authentication. M

Business Data Connectivity

I came to a requirement wherein I was supposed to get data from an 3 rd party portal using API’s and then bring them to SharePoint server. The first approach that I finalized was just to make BDC solution that will get data from 3 rd party portal and will deploy it to SharePoint. How to Create BDC solution in SharePoint? I found below link that is having really great description about hot to create and deploy the BDC solution to SharePoint. http://www.c-sharpcorner.com/uploadfile/hung123/creating-business-data-connectivity-service-using-visual-studio-2010/ After creating an POC I came to know that BDC model cannot be deployed on Multi tenant farm. So what can be done next? After some amount of googling I came to know that we can create BDC solution using WCF services also. So I created a WCF service solution that acted as a wrapper that used to fetch data from the portal. We can them publish that service to IIS or Server and use the service referen

New-PnPTenantSite: The remote server returned an error: (401) Unauthorized.

New-PnPTenantSite: The remote server returned an error: (401) Unauthorized. Recently I was working on automate SharePoint site provisioning PnP script. We wanted to schedule this script to auto trigger on hourly basis, so we scheduled the script. As the script was to be scheduled one, we started creating SharePoint Apps to manage authentication. Register SharePoint Add-ins Go to <site collection url>/_layouts/15/AppRegNew.aspx by using a web browser. AppRegNew page form Enter values for the follow form fields: Add-in ID . Also known as client ID; a GUID that can be generated (when you select Generate ) or pasted into AppRegNew.aspx. The value must be unique for each add-in and must be lowercase .   Add-in Secret . Also known as the client secret, an opaque string. It is generated on the AppRegNew.aspx page by using the Generate button. Title:  A user-friendly title: for example, Contoso photo print