To export calendar permissions in Exchange Online, read each mailbox's Calendar folder with Get-EXOMailboxFolderPermission and save the entries to a CSV file. Every calendar also has a Default entry for the organisation and an Anonymous entry for people who do not sign in; they matter when they are not at their usual AvailabilityOnly and None. The Exchange admin centre does not show calendar permissions.
| Method | Best fit |
|---|---|
| PowerShell | A CSV of every mailbox's calendar entries, with the usual Default and Anonymous entries left out. |
| Admin centre | Checking what people may share outside the organisation. |
| Altivane | Recommended for recurring reviews, with each entry rated. |
Before you start
Use an account with the Exchange Administrator role or in the Organization Management role group. The admin centre steps work with a Global Reader. The script signs in as you and needs no app registration.
Know what the entries mean. A named user holds a role such as Reviewer, which reads every item, or Editor, which manages every item. Default covers signed-in people in the organisation without an entry of their own, usually at AvailabilityOnly, free and busy times only; at Reviewer or above, everyone can read the calendar. Anonymous covers people who do not sign in, usually at None. The examples read the permissions as they stand when run and change nothing.
Option 1
Export calendar permissions with PowerShell
Install the module once, then connect and read the calendar of every user, shared, room and equipment mailbox. The script reads 1 mailbox at a time, so a large tenant takes a while.
# Install once, if the module is not already installed.
Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser$ErrorActionPreference = 'Stop'
Connect-ExchangeOnline -ShowBanner:$false
try {
$types = 'UserMailbox', 'SharedMailbox', 'RoomMailbox', 'EquipmentMailbox'
$mailboxes = Get-EXOMailbox -ResultSize Unlimited -RecipientTypeDetails $types
$report = @(foreach ($mailbox in $mailboxes) {
$folder = "$($mailbox.UserPrincipalName):\Calendar"
try {
$entries = Get-EXOMailboxFolderPermission -Identity $folder
} catch {
Write-Warning "Could not read $folder. $($_.Exception.Message)"
continue
}
foreach ($entry in $entries) {
$user = [string]$entry.User.DisplayName
if (-not $user) { $user = [string]$entry.User }
$rights = $entry.AccessRights -join ', '
# Default and Anonymous are on every calendar: keep them only when changed.
if ($user -eq 'Default' -and $rights -eq 'AvailabilityOnly') { continue }
if ($user -eq 'Anonymous' -and $rights -eq 'None') { continue }
[pscustomobject]@{
Mailbox = $mailbox.DisplayName
Address = $mailbox.PrimarySmtpAddress
MailboxType = $mailbox.RecipientTypeDetails
User = $user
UserType = [string]$entry.User.UserType
AccessRights = $rights
Flags = $entry.SharingPermissionFlags -join ', '
}
}
})
if ($report.Count -eq 0) {
Write-Output 'No calendar has named users or changed Default and Anonymous entries.'
} else {
$report | Export-Csv -Path './calendar-permissions.csv' -NoTypeInformation -Encoding utf8
Write-Output "$($report.Count) calendar permission entries exported."
}
} finally {
Disconnect-ExchangeOnline -Confirm:$false
}Flags shows Delegate for an Outlook delegate and CanViewPrivateItems for someone who sees private items. A UserType of External marks sharing outside the organisation, and Unknown can mean the account no longer exists. Change $types to narrow the run.
Check 1 mailbox's calendar
Reconnect with Connect-ExchangeOnline, then read 1 calendar.
# Run while connected to Exchange Online. Replace the example mailbox.
Get-EXOMailboxFolderPermission -Identity 'person@example.com:\Calendar' |
Format-Table User, AccessRights, SharingPermissionFlagsAdd -User and a person's address to see only their entry; the command returns an error when they have none.
Option 2
Check calendar sharing in the Microsoft 365 admin centre
No admin centre lists each calendar's permissions: the Exchange admin centre's delegation covers Full Access, Send as and Send on behalf only. The Microsoft 365 admin centre shows what people may share outside the organisation.
- Sign in to the Microsoft 365 admin centre for the correct tenant.
- Select Show all, then go to Settings > Org Settings.
- On the Services tab, select Calendar.
- Read whether Let your users share their calendars with people outside of your organization who have Office 365 or Exchange is selected, and whether Allow anyone to access calendars with an email invitation is selected with a level of detail under it.
- Close the pane without saving.
This shows what the organisation allows, not which calendars are shared or with whom. For that, export the permissions with PowerShell or a report.
Option 3 ยท Recommended for recurring reviews
Report on calendar permissions with Altivane
- Open Altivane and choose the tenant.
- Run the Calendar Permissions report.
- Open the tenant's Excel workbook and find the Calendar permissions table. Entries marked Warning or Review are listed first.
- For permissions that deleted accounts still hold, run the Orphaned Permissions report too.
Altivane also reads calendars whose folder has another name, which the script above reports as unreadable. It leaves out the usual Default and Anonymous entries and rates the rest: a Default at Reviewer is marked Review and at Author or above Warning, people outside the organisation are marked Review, and any Anonymous access or deleted account is marked Warning.
Contact usCommon questions
Why can a mailbox's calendar not be found?
The folder may have another name, such as when the mailbox's folder names are in another language. Run Get-EXOMailboxFolderStatistics with -Folderscope Calendar for that mailbox to see its name, and read that folder instead.
Does Full Access give someone the calendar?
Full Access opens the mailbox but does not set a calendar role, so someone can hold it and appear nowhere in this export. To export it, see how to export mailbox permissions.
Is everyone with Editor a delegate?
No. An Outlook delegate has Editor and the Delegate flag. Editor without the flag manages the items but is not a full delegate, which also covers how meeting requests are delivered. Set up delegates in Outlook, signed in as the owner.
Microsoft references
Technical references checked on 24 October 2026. The example scripts have been reviewed and syntax checked; they have not been run against a live tenant.
- Understand calendar and delegate permissions in Exchange Online
- Validate calendar permissions in Exchange Online
- Get-
EXOMailbox Folder Permission reference - Get-EXOMailbox reference
- Share Microsoft 365 calendars with people outside your organisation
- Manage permissions for recipients in Exchange Online
- Permissions in Exchange Online