SharePoint administrators are often tasked with producing reports like:
This is especially common when preparing for governance reviews, restructuring initiatives, or compliance audits. Manual collection is too slow and prone to error.
To solve this quickly, HarjTech built a production-ready PowerShell script using PnP PowerShell that loops through all sites, collects every list, and outputs a clean CSV.
This guide walks you through:
Open PowerShell in administrator mode and run the following command to install the module:
Install-Module -Name PnP.PowerShell -Force -AllowClobber
When prompted to trust the repository, type Y
and press Enter.
Use the command below to log in securely. This supports multi-factor authentication.
Connect-PnPOnline -Url "https://yourtenant.sharepoint.com" -Interactive
Replace yourtenant
with your Microsoft 365 tenant name.
This script connects to the SharePoint admin center, retrieves all non-personal site collections, and collects data on every list found.
# -------------------------------------------------------------
# Script by HarjTech | www.harjtech.com
# Purpose: List all SharePoint Lists across the tenant
# Outputs: Clean CSV with site title, list name, type, item count
# -------------------------------------------------------------
Import-Module PnP.PowerShell
# Connect to SharePoint Admin Center
$adminSiteUrl = "https://yourtenant-admin.sharepoint.com"
Connect-PnPOnline -Url $adminSiteUrl -Interactive
# Get all site collections, excluding OneDrive personal sites
$sites = Get-PnPTenantSite | Where-Object { $_.Template -ne "SPSPERS" }
# Prepare output array
$report = @()
# Loop through each site and retrieve lists
foreach ($site in $sites) {
Write-Host "Processing site:" $site.Url -ForegroundColor Cyan
try {
Connect-PnPOnline -Url $site.Url -Interactive
$lists = Get-PnPList
foreach ($list in $lists) {
$report += [PSCustomObject]@{
SiteTitle = $site.Title
SiteUrl = $site.Url
ListTitle = $list.Title
ItemCount = $list.ItemCount
ListTemplate = $list.BaseTemplate
Created = $list.Created
LastModified = $list.LastItemModifiedDate
}
}
}
catch {
Write-Warning "Could not access site: $($site.Url)"
}
}
# Export to CSV
$csvPath = "$env:USERPROFILE\Desktop\Tenant-List-Audit-HarjTech.csv"
$report | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
Write-Host "`nReport saved to $csvPath" -ForegroundColor Green
The exported file opens in Excel or any CSV-compatible tool.
It includes:
You can filter by:
This script gives you visibility. But governance, cleanup, and restructuring still require planning and execution. That’s where HarjTech delivers.
We help organizations:
Whether you're cleaning up after years of unstructured growth or preparing for an M365 rollout — we can help.
Our team is dedicated to shaping a better working world by creating long-term value for our clients, our people, and society while fostering trust in the capital markets.