Need to manage calendar access in Exchange? PowerShell is the preferred way to manage access to calendars in user and shared mailboxes that are hosted on on-premises Exchange Server or on Microsoft 365. Our guide explains how to use PowerShell to list, add, and remove calendar permissions in Exchange mailboxes.
Calendar in a Microsoft 365 and Exchange Server mailbox is a pre-configured system folder that is displayed in a special calendar view in Outlook/OWA. Users in an Exchange organization can view, create or edit items in other users’ calendars if they have been granted permission to access them.
Default calendar permissions in Outlook and OWA
By default, users can only view Free/Busy information in other users’ calendars. Each user can grant and revoke permissions to their calendar to other users from within the Outlook client interface. For detailed mailbox folder-level calendar permissions (such as assigning specific AccessRights to a user’s Calendar folder), Exchange Online PowerShell provides more granular control than the Exchange admin center.
PowerShell Cmdlets for Calendar Permissions
The following PowerShell cmdlets can be used to manage permissions for Calendar (and other mailbox folders):
Get-MailboxFolderPermission โ list current calendar permissions;
Add-MailboxFolderPermission โ grant calendar permissions to a user or group;
Get-MailboxCalendarFolder โ get calendar folder information.
Connecting to Exchange Online and On-Premises Exchange with PowerShell
Connect to your Microsoft 365 or on-premises Exchange Server tenant from the PowerShell console in order to use these cmdlets.
PowerShell version. For new Exchange Online automation, we recommend using PowerShell 7.6 or later. Windows PowerShell 5.1 remains supported by the Exchange Online PowerShell module. You need to make sure you are using a supported version of PowerShell before installing/updating the module.
Use the Exchange Online PowerShell module to connect to Microsoft 365 (Exchange Online) tenant:
In order to update an existing installation of the ExchangeOnlineManagement module, run the following command:
Update-Module ExchangeOnlineManagement
If you are logged on locally to an on-premises Exchange Server, open the Exchange Management Shell (EMS) to run Exchange PowerShell cmdlets. For supported on-premises Exchange deployments, you should use the Exchange Management Shell (EMS) or Exchange Management Tools provided with Exchange Server Subscription Edition (SE). Exchange Server 2016 and 2019 reached end of support on October 14, 2025. Exchange 2010 and earlier are also out of support and you should treat them as legacy environments.
Legacy Exchange environments: If you still manage such a legacy environment, you may encounter the legacy Exchange PowerShell snap-in:
Keep in mind that these methods require the appropriate Microsoft Entra app config and Exchange Online permissions.
Required Exchange permissions
In order to manage calendar folder permissions, the account must have the appropriate Exchange RBAC permissions for the requested operation. In enterprise environments, you should use the least-privileged role/role group that provides the required access instead of broad admin roles. In case a cmdlet fails with an authorization error, you should check the roles available for the cmdlet and the roles assigned to the account:
The required permissions depend on the cmdlet and operation being performed.
View Mailbox Calendar Permissions with PowerShell
Note that you should use UPN (user@domain.com) as the primary and recommended identifier for all mailbox operations.
The Get-MailboxFolderPermission cmdlet lists the existing calendar permissions for the specified mailbox. Specify the mailbox name and the Calendar folder name as the cmdlet arguments:
In this case, only the default permission AvailabilityOnly is assigned to a Calendar folder. This allows other users to see Free/Busy information in the calendar.
Using Get-EXOMailboxFolderPermission in Exchange Online
Note that our examples below demonstrate the basic method. For really large tenants, you should add logging, result export, retry/backoff handling, and batching for production automation.
In case you are managing Exchange Online, you can also use the REST-based Get-EXOMailboxFolderPermission cmdlet:
This cmdlet can be useful when you are troubleshooting calendar config issues or reviewing calendar folder settings.
Note. The name of the folder in which the calendar is stored may differ depending on the mailbox language settings. If this command returns that โusername:\calendarโ cannot be found, it is most likely that the user has Outlook language settings other than English. Appropriately, the Calendar folder name can be different (calendar\kalender\calendario\calendrier\ะบะฐะปะตะฝะดะฐัั). For example, to view calendar permissions for the Dutch Language (nl-NL) use the command:
Handling transient errors in large Exchange Online tenants
Keep in mind that bulk operations against Exchange Online can encounter transient failures, throttling, or temporary service errors. The try/catch blocks used in the examples below prevent a single failed mailbox from terminating the entire operation, but they do not retry failed requests. In case you are working with large production tenant, you should add retry with exponential backoff, logging, and a final report of mailboxes that could not be processed.
For example, you can use a small retry helper for operations that may fail temporarily:
function Invoke-WithRetry { param( [Parameter(Mandatory)] [scriptblock]$ScriptBlock,
The helper retries any exception raised by the wrapped command. You should refine the retry logic to target only transient errors (such as throttling and temporary service failures), while handling permanent errors (such as authorization failures, invalid parameters, and missing mailboxes) without retries.
List Default Mailbox Calendar Permissions in Exchange with Get-EXOMailbox
You can get the list of default mailbox calendar permissions in your organization using following command:
How can I find calendars a specific user has access to?
You can find all the calendars in your organization that a particular user has been granted access to. In this example, we want to display a list of user mailboxes whose calendars are allowed to be accessed by a user named Muller:
Note that depending on environment, the User field may contain UPN, alias, or domain\user format.
PageSize controls the number of mailbox objects returned per page. The appropriate value depends on the size of the tenant and the workload; you should not treat it as a universal performance setting.
The Mailbox and Identity columns identify the mailbox and calendar folder, while the User column shows the user who has permissions on the calendar. The AccessRights field displays the assigned calendar permissions.
Understanding Outlook Calendar Permissions
When managing calendar and Outlook folder permissions, you can use the following predefined permission levels:
Owner โ gives full control of the mailbox folder: read, create, modify, delete items/folders, and manage permissions;
PublishingEditor โ read, create, modify, and delete items/subfolders (all permissions, except the right to change permissions);
PublishingAuthor โ create, and read all items/subfolders. You can modify and delete only items that you have created;
Author โ create and read items. Edit and delete own items;
NonEditingAuthor โ full read access, and create items. You can delete only your own items;
Reviewer โ read folder items only;
Contributor โ create items and folders (canโt read items);
AvailabilityOnly โ read Free/Busy time from the calendar;
LimitedDetails โ view the availability, subject and location of appointments in the calendar;
None โ no permissions to access the folder.
You can also use granular permissions to fine-tune the access rights to the mailbox calendar:
CreateItems;
CreateSubfolders;
DeleteAllItems;
DeleteOwnedItems;
EditAllItems;
EditOwnedItems;
FolderContact;
FolderOwner;
FolderVisible;
ReadItems.
The Permission Level roles described above are just a set of granular permissions. For example, the Editor role is a set of the following individual permissions:
CreateItems
DeleteAllItems
DeleteOwnedItems
EditAllItems
EditOwnedItems
FolderVisible
ReadItems
Adding Calendar Permissions in Exchange with PowerShell
In order to grant user2 the permission to view and edit user1 calendar items, use the following command:
The same mailbox folder permission cmdlets can be used with shared mailboxes. You need to simply specify the shared mailbox address in the Identity parameter when granting, modifying, viewing, or removing calendar permissions:
You can assign calendar permissions to a specific userโs calendar in bulk. Create a CSV text file containing a list of users you want to grant permission to, and run the command:
You can use the SendNotificationToUser parameter with Add-MailboxFolderPermission and Set-MailboxFolderPermission to generate a sharing invitation email. The option -SendNotificationToUser $true can be used only when you set one of the following permissions via the AccessRights parameter: AvailabilityOnly, LimitedDetails, Reviewer, or Editor. The following command will send a sharing invitation to the user2:
This is what the sharing invitation will look like in Outlook:
Youโre invited to share this calendar. UserName has invited you to view his or her Calendar. Click the Open button above.
Note. You can grant access to the mailbox calendar not only for an individual user, but also for a Microsoft 365 group or a mail-enabled AD security group.
How to change or remove calendar permissions with PowerShell
You can change the Default permissions for the shared mailbox calendar folder and allow all organization users to view calendar items:
You can make this bulk calendar permissions change using a simple PowerShell script. To change the Default calendar permission for all mailboxes to Reviewer:
This allows authenticated users in the organization to view calendar items in these mailboxes. Note that granting Reviewer permissions to the Default principal allows all authenticated users in the organization to view calendar items. You should test this config carefully before applying it organization-wide.
To revoke the calendar permissions, use the Remove-MailboxFolderPermission cmdlet.
Note. Since Exchange Online V3 you got modern REST-based cmdlets such as Get-EXOMailbox and Get-EXORecipient. However, while Exchange Online provides the REST-based Get-EXOMailboxFolderPermission cmdlet for reading mailbox folder permissions, permission changes still require the traditional Add-MailboxFolderPermission, Set-MailboxFolderPermission, and Remove-MailboxFolderPermission cmdlets.
The previous example removes all custom permissions except Default and Anonymous in Exchange Online. If you want to preserve specific delegated accounts (such as a secretary mailbox), exclude them from the removal filter as shown below:
When you finish managing Exchange Online, don’t forget to close the Exchange Online PowerShell session:
Disconnect-ExchangeOnline -Confirm:$false
After granting calendar permissions, users can access the shared calendar from Outlook/Outlook on the web. The exact steps depend on the Outlook client and whether the calendar belongs to a user, shared mailbox, or resource mailbox.
Brian Jackson started this blog in 2011. Brian has a huge passion for WordPress and technology for over a decade. Brian enjoys blogging, movies, and hiking.