This is a PowerShell script to remove a site admin from all sites in SharePoint Online. You may find an account which has been added to every site as a site admin — this can happen when a user is added to the SharePoint Admin role group, and even when the account is removed it may remain stamped across all of your sites.
This script can report on all the site admins for your SharePoint sites, and also optionally remove a site admin if needed. It requires the SharePoint Online Management Shell.
# Script to remove an admin from all SharePoint sites, or just report on all site admins
Import-Module "Microsoft.Online.SharePoint.PowerShell"
Write-Host "Connecting to SharePoint (SPOService)..." -ForegroundColor Yellow
$sharepointadmin = "https://tenant-admin.sharepoint.com"
try {
$var = Get-SPOGeoStorageQuota
} catch {
Write-Host "Not connected, authenticate in other window"
Connect-SPOService -Url $sharepointadmin
}
# UPN of the user to remove as site admin
$siteadmin = "user@test.com"
$timestamp = (Get-Date).ToString('MM.dd.yyyy,hh.mm.ss.tt')
$logfile = "c:\temp\Logs\SiteAdmins$timestamp.csv"
Write-Host "Processing..."
$sites = Get-SPOSite -Limit All -Filter { Url -notlike "*-my.sharepoint.com*" }
foreach ($site in $sites) {
$site.Url
$allusers = Get-SPOUser -Site $site.Url -Limit all | Where-Object {$_.IsSiteAdmin -eq $true} | Select DisplayName,LoginName,IsSiteAdmin
foreach ($user in $allusers) {
$array += @(@{DisplayName=$user.DisplayName;LoginName=$user.LoginName;IsSiteAdmin=$user.IsSiteAdmin;URL=$site.Url})
if ($user.LoginName -eq $siteadmin) {
Write-Host "Removing site admin $siteadmin from" $site.Url
Set-SPOUser -Site $site -LoginName $siteadmin -IsSiteCollectionAdmin $false
}
}
}
Write-Host "List of site admins"
$array | ForEach-Object {[PSCustomObject]$_} | Sort-Object URL | Format-Table DisplayName,LoginName,IsSiteAdmin,URL
$array | ForEach-Object {[PSCustomObject]$_} | Select-Object DisplayName,LoginName,IsSiteAdmin,URL | Sort-Object DisplayName | Export-Csv $logfile -NTI