SharePoint Online permissions tend to accumulate over time — stale site memberships, over-privileged guest accounts, and broken inheritance chains create both compliance risk and confusion. PnP PowerShell gives you a concise, cross-site toolset for auditing and cleaning up permissions at scale without touching the SharePoint admin UI.

Prerequisites

Install the PnP PowerShell module and connect to your SharePoint tenant with site collection administrator credentials.

Install-Module PnP.PowerShell -Scope CurrentUser
Connect-PnPOnline -Url "https://contoso.sharepoint.com" -Interactive

Auditing All Site Collection Memberships

Export every unique permission assignment across all site collections to a CSV for compliance review.

$sites = Get-PnPTenantSite | Select-Object -ExpandProperty Url
$report = foreach ($site in $sites) {
    Connect-PnPOnline -Url $site -Interactive
    $groups = Get-PnPSiteGroup
    foreach ($group in $groups) {
        $members = Get-PnPGroupMember -Identity $group.Title
        foreach ($member in $members) {
            [PSCustomObject]@{
                Site       = $site
                Group      = $group.Title
                Member     = $member.Title
                LoginName  = $member.LoginName
            }
        }
    }
}
$report | Export-Csv "SPO-Permissions-$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation

Removing a User from All Sites

When an employee leaves, remove them from every SharePoint site collection in a single loop.

$userUPN = "[email protected]"
foreach ($site in $sites) {
    Connect-PnPOnline -Url $site -Interactive
    Remove-PnPUser -Identity $userUPN -ErrorAction SilentlyContinue
    Write-Host "Removed $userUPN from $site"
}

Enforcing Unique Permissions on Sensitive Libraries

Ensure libraries containing sensitive documents break inheritance and restrict access to approved groups only.

Connect-PnPOnline -Url "https://contoso.sharepoint.com/sites/Finance" -Interactive
Set-PnPListPermission -Identity "Contracts" -AddRole "Finance Team" -Group "Finance Owners"
Set-PnPListPermission -Identity "Contracts" -RemoveRole "Members"

Summary

PnP PowerShell dramatically simplifies SharePoint Online permission management at scale. Building these scripts into a weekly scheduled task — or a GitHub Actions workflow triggered on HR system changes — keeps your permission model clean, compliant, and auditable without any manual portal work.