Report on items shared with Everyone or Everyone Except External Users in SharePoint Online

It has been a while since we last talked about SharePoint Online’s Data Access Governance reports, and since then Microsoft addressed some of the criticism we expressed previously. We now have a way to programmatically trigger the data collection process and download the results, as part of the SPO PowerShell module cmdlets. We also have some new reports, which you can find under the Sites and files shared via special SharePoint groups section. Let’s take a look.

Generating the reports

To access the new reports, you will need to navigate to the Data access governance page of the SharePoint Online Admin Center. And yes, this is still a premium functionality only available to customers with the SharePoint Advanced Management SKU or equivalent. Next, hit the View reports button from the Sites and files shared via special SharePoint groups section. You will be taken to a new page, where the two new reports reside.

The Content shared with ‘Everyone’ group report allows you to generate the list of items (sites, folders and files) where at least one permission entry references the Everyone group, effectively rendering said item public. Its sibling, the Content shared with ‘Everyone except external users’ group report addresses similar scenario, but for permissions granted to the Everyone except external users group.

SPOEveryoneTo start the data collection process, click the corresponding Run report button. Do note that you will need the SharePoint Advanced Management admin role assigned first. Alternatively, you can use the SharePoint Online PowerShell module:

#Run the Content shared with 'Everyone' group report
Start-SPODataAccessGovernanceInsight -ReportEntity Everyone -ReportType Snapshot

#Run the Content shared with 'Everyone except external users' group report
Start-SPODataAccessGovernanceInsight -ReportEntity EveryoneExceptExternalUsers -ReportType Snapshot

Both reports include data across your entire SPO/ODFB estate (excluding system files and groups), thus do not need the use of the –Workload parameter. Refer to the official documentation for additional details and examples.

The data collection process runs asynchronously on the backend. There is no progress indicator provided either in the UI nor via PowerShell, but you can check on the report’s status by both methods.

SPOEveryone1

#Check the status of the Content shared with 'Everyone' group report
Get-SPODataAccessGovernanceInsight -ReportEntity Everyone
WARNING: This command is currently in preview and may undergo breaking changes in future releases.

ReportId             : 59079222-c6e5-4c23-a3a5-7f7130572e91
ReportEntity         : Everyone
Status               : InProgress
Workload             :
TriggeredDateTime    : 23/09/26 06:15:07
CreatedDateTime      : 23/09/26 06:15:58
ReportType           : Snapshot
CountOfSitesInReport : 0

#Check the status of the Content shared with 'Everyone except external users' group report
Get-SPODataAccessGovernanceInsight -ReportEntity EveryoneExceptExternalUsers
WARNING: This command is currently in preview and may undergo breaking changes in future releases.

ReportId             : 4da16f97-74bd-4238-ab80-b7fb1b859ca0
ReportEntity         : EveryoneExceptExternalUsers
Status               : InProgress
Workload             :
TriggeredDateTime    : 23/09/26 06:15:16
CreatedDateTime      : 23/09/26 06:16:01
ReportType           : Snapshot
CountOfSitesInReport : 0

Viewing the reports

Once data has been gathered (which can take hours or even days in larger tenants), you can download the resulting CSV files by pressing the corresponding Download report button. Do note that you can only run said reports once every 30 days or so, thus the Run report button remains grayed out.

SPOEveryone2

The resulting CSV file can contain maximum of 1 million entries, listing each individual site, file or folder with an offending permission entry stamped. Among the details included are the relative item URL, as well as GUIDs for the tenant, site, web, list, whereas the Recipient and UserPrincipalName column reflect the Everyone or Everyone Except External Users values. For complete list of columns refer to the following table.

SPOEveryone3While the resulting CSV files give you all the required details to identify items that might have broader access than intended, the new reports offer nothing in terms of actually addressing the oversharing. This is in stark contrast with the other reports exposed by the DAG functionality, most of which offer detailed pages to review the results, and even expose actions. All you get here is a button to generate the report and a button to download it.

Another issue, clearly visible on the screenshot above, is the lack of proper support for localization. It is mindboggling that in the year of 2026 Microsoft still hasn’t figured out encoding. To be clear, this is more than a simple display issue, as it breaks the PowerShell cmdlet to download the reports:

SPOEveryone4

#Download an already generated report by referencing its ID
Export-SPODataAccessGovernanceInsight -ReportID 4da16f97-74bd-4238-ab80-b7fb1b859ca0 -DownloadPath "D:\Downloads\aaaa.csv"

Do it yourself

This semi-broken implementation begs the question, can we do better than Microsoft? As we know form our previous article, the DAG reports are stored in a list within the “admin” site collection. Which means, we can easily fetch them via PnP. While we can “guesstimate” the file based on its creation timestamp and name, we can also dig a bit deeper and fetch the definition from the Metadata field:

#Connect to PnP via CBA
Connect-PnPOnline -Url "https://tenant-admin.sharepoint.com" -ClientId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -CertificateBase64Encoded $base64encodedstring -Tenant tenant.onmicrosoft.com

#Fetch items in the DO_NOT_DELETE_DOCLIB_DATAGOVERNANCE_REPORT_INSTANCE list
$files = Get-PnPListItem -List DO_NOT_DELETE_DOCLIB_DATAGOVERNANCE_REPORT_INSTANCE -Fields Created,FileRef,Title,Metadata

#Find the one(s) matching the report ID as reported via *-SPODataAccessGovernanceInsight cmdlets
$report = &{($files | ? {($($_.FieldValues["Metadata"]) | ConvertFrom-Json).DetailedEEEUId -eq "4da16f97-74bd-4238-ab80-b7fb1b859ca0"} | select -ExpandProperty FieldValues)["FileRef"]} 2>$null

#Fetch the file content and export to CSV
Get-PnPFile $report -AsString | ConvertFrom-Csv | Export-Csv -NTI D:\Downloads\a21.csv -Encoding unicode -QuoteFields *

Do not forget to replace the GUID of the report instance in the code above! The result should match the file exported via the UI, but with proper encoding (you might need Text to Columns first):

SPOEveryone5

 

Apart from ensuring data is readable, PowerShell can of course be used to generate your own version of the report. A simple call to the Get-SPOSite cmdlet can be used to enumerate all sites. We iterate over each site via the Get-SPOSiteGroup cmdlet to expose groups where the relevant principal (represented by spo-grid-all-users/2175215d-204f-4812-9b98-7a025d7803a2 for Everyone Except External Users) has been added. Here’s the relevant code:

#Enumerate all istes
$sites = Get-SPOSite -IncludePersonalSite:$true

#Report on Everyone Except External Users
$out = foreach ($s in $sites) { &{Get-SPOSiteGroup -Site $s.Url} 2>$null | ? {$_.Users -match "spo-grid-all-users/2175215d-204f-4812-9b98-7a025d7803a2"} | select *,@{n="Url";e={$s.url}}}

$out | ogv -PassThrough

SPOEveryone6

The sample code above does nothing with regards to individual files, it only covers sites. The level of detail is also quite small compared to the built-in report, but you might be surprised just how close the data is.

Summary

In summary, we explored the recently released Content shared with ‘Everyone’ group and Content shared with ‘Everyone except external users’ group reports. Both reports are part of Data Access Governance/SharePoint Advanced Management, and can only be accessed if you have the relevant SKU and role. Much like other DAG reports, you need to generate them on demand via asynchronous operation, which can take some time in larger organizations.

Both reports serve to highlight sites, lists and items that have been exposed to the entire organization, either intentionally or by mistake. One can indeed argue that this is yet another Microsoft-made problem, as you will undoubtedly find many group and Team sites listed within the results, something that was repeatedly brought as potential issue back when Microsoft 365 Groups were first introduced. In turn, having to pay for SAM to address this can be seen as another money grab attempt.

Sadly, no method has been provided to act on the offending sites/items, so the reports are of purely informational value. Any action needs to be manually performed, and best you can do is use the generated report data as input for automation scripts. Which is still better than nothing, but less than I expected.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Discover more from Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading