Extract SharePoint External Users with PowerShell

One of our clients recently came to us with a clear—but tricky—requirement:
➡️ “We need a list of all external users across our SharePoint tenant, along with who invited them and when they were invited.”
Simple, right? Not quite.
✅ Using a third-party tool wasn’t an option due to internal compliance policies.
🚫 Microsoft doesn’t provide a direct, out-of-the-box way in the SharePoint admin center to export this level of detail across all sites.
So what did we do?
We built a lightweight but effective PowerShell script to get the job done.
This script:
-
Loops through all SharePoint Online sites in the tenant
-
For each site, it identifies external users (guests)
-
Extracts useful info like email, display name, who invited them, and the invitation date
-
Then exports the final result to a clean CSV file for easy auditing and reporting
💡 While simple, this script saved the client hours of manual work and gave them clear visibility into their external sharing posture.
🔧 No third-party tools, no complex deployments—just native PowerShell and Microsoft 365 modules.
📥 Want the script? Drop a comment or message me and I’ll be happy to share it.
#Import SharePoint Online Management Shell Import-Module Microsoft.Online.Sharepoint.PowerShell -DisableNameChecking #Config Parameters $AdminSiteURL="https://[YOURTENANT]-admin.sharepoint.com" $ReportOutput ="C:\Temp\ExternalUsersRpt_AllSites.csv" #Connect to SharePoint Online Tenant Admin Connect-SPOService -URL $AdminSiteURL #Get All Site Collections $SiteCollections = Get-SPOSite -Limit All #Iterate through each site collection and get external users Foreach ($Site in $SiteCollections) { Write-host -f Yellow "Checking Site Collection:"$Site.URL Try { For ($x=0;;$x+=50) { $ExternalUsers += Get-SPOExternalUser -SiteUrl $Site.Url -Position $x -PageSize 50 -ErrorAction Stop | Select DisplayName,EMail,InvitedBy,AcceptedAs,WhenCreated,@{Name = "SiteUrl" ; Expression = {$Site.url} } } } catch {} } #Export the Data to CSV file $ExternalUsers | Export-Csv -Path $ReportOutput -NoTypeInformation
#PowerShell #SharePoint #Microsoft365 #Governance #ExternalUsers #M365Security #SharePointOnline #Logisam #PowerPlatform #MVPBuzz