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
- $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
- Save the script to a .ps1 file.
- Open PowerShell with administrative privileges.
- 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