To make a meeting room or a piece of shared equipment bookable in Microsoft 365, create a resource mailbox with New-Mailbox -Room or New-Mailbox -Equipment, then tune its booking rules with Set-CalendarProcessing. Users add the resource to a meeting invitation like any other attendee, and Exchange accepts or declines the request automatically, or forwards it to an approver.
Who this is for and what you will have
This guide is for administrators of small and mid-sized Microsoft 365 tenants who need a reliable way to book meeting rooms, projectors, loan laptops or a pool car without a separate booking system. By the end you will have:
- A room mailbox and an equipment mailbox with sensible names and metadata.
- Booking limits (how far ahead, how long, working hours only).
- Either open booking, restricted booking for named groups, or delegate approval.
- A room list so users can browse rooms by building.
- A verification routine and fixes for the common problems.
Room versus equipment mailboxes
Microsoft defines two kinds of resource mailbox:
| Type | Represents | Examples |
|---|---|---|
| Room mailbox | A resource assigned to a physical location | Conference room, auditorium, training room |
| Equipment mailbox | A resource that is not location specific | Portable computer, projector, microphone, company car |
Room mailboxes support extra metadata such as wheelchair accessibility, tags and audio, display and video device names. The admin centre lists those extra fields for room mailboxes only. Both types are booked in the same way, and the booking rules you configure later apply to both.
Prerequisites
- An account with permissions to manage recipients in Exchange Online (for example, Exchange Administrator).
- The Exchange Online PowerShell module. If you have not connected before, see /blog/connect-exchangeonline-errors-fix for connection problems.
- A naming convention. The Microsoft documentation suggests summarising key details in the Name value because users see the name when they pick the resource from the address book. A pattern such as
Room - HQ - 2F - Boardroom (12)carries the building, floor and capacity without extra lookups. - In a hybrid deployment, create resource mailboxes where they belong: room mailboxes for your on-premises organisation in on-premises Exchange, and room mailboxes for your Exchange Online organisation in Exchange Online.
- Do not use nested groups anywhere a resource mailbox setting accepts a group. Only non-nested groups work.
Connect first:
Connect-ExchangeOnline -UserPrincipalName [email protected]Create the mailboxes
In the Exchange admin centre
- Open the Exchange admin centre at
https://admin.exchange.microsoft.comand go to Recipients > Resources. - Select Add a room resource or Add an equipment resource. The wizard is the same for both.
- On the setup page enter a unique Name and a Resource mail address: an alias on the left of the at sign and an accepted domain on the right.
- On the Set properties page you can optionally set Capacity, Location, Phone number, Department, Company, an Address book policy and the postal address fields.
- On the Booking delegate settings page choose the booking options and whether requests are accepted automatically or sent to delegates (both are covered below).
- Review, select Create, then Done.
With PowerShell
The PowerShell syntax from Microsoft's documentation is:
New-Mailbox -Name <Name> <-Room | -Equipment> [-Alias <Alias>] [-DisplayName "<DisplayName>"] [-PrimarySmtpAddress <EmailAddress>]Create one of each:
New-Mailbox -Name "HQ-2F-Boardroom" -Room -DisplayName "Boardroom (HQ 2F, 12 seats)" -PrimarySmtpAddress [email protected]
New-Mailbox -Name "Projector-01" -Equipment -DisplayName "Projector 01" -PrimarySmtpAddress [email protected]If you omit -Alias, the Name value is also used as the alias in the email address, so avoid spaces in Name when you do not pass -PrimarySmtpAddress.
Add capacity and room metadata
Set-Mailbox can record capacity, and Set-Place adds metadata that improves search and room suggestions in Outlook. Set-Place is available only in the cloud service and Microsoft recommends the EXO V3 module for it.
Set-Mailbox -Identity [email protected] -ResourceCapacity 12
Set-Place -Identity [email protected] -Building "HQ" -Floor 2 -FloorLabel "Second floor" -Capacity 12 -IsWheelChairAccessible $true -AudioDeviceName "Conference speakerphone" -DisplayDeviceName "75-inch display"In a hybrid environment, Set-Place does not change City, CountryOrRegion, GeoCoordinates, Phone, PostalCode, State or Street on synchronised room mailboxes. Use Set-User or Set-Mailbox on-premises for those.
Understand the booking defaults
Check what a new resource does out of the box:
Get-CalendarProcessing -Identity [email protected] | Format-List AutomateProcessing,AllBookInPolicy,AllRequestInPolicy,BookingWindowInDays,MaximumDurationInMinutes,AllowRecurringMeetings,ScheduleOnlyDuringWorkHours,DeleteSubject,AddOrganizerToSubjectFrom the Set-CalendarProcessing reference, the relevant defaults are:
| Setting | Default | Meaning |
|---|---|---|
| AutomateProcessing | AutoAccept (for mailboxes created in the admin centre, or in PowerShell after 15 November 2018) | The resource booking attendant accepts or declines based on policy |
| AllBookInPolicy | True | In-policy requests from everyone are approved automatically |
| AllRequestInPolicy | False | Nobody is routed to a delegate for approval |
| BookingWindowInDays | 180 | How far ahead the resource can be booked (0 to 1080) |
| MaximumDurationInMinutes | 1440 | Longest allowed meeting (24 hours) |
| AllowRecurringMeetings | True | Recurring meetings are allowed |
| ScheduleOnlyDuringWorkHours | False | Requests outside working hours are accepted |
| AllowConflicts | False | Conflicting bookings are declined |
| DeleteSubject | True | The subject of the request is removed |
| AddOrganizerToSubject | True | The organizer's name replaces the subject |
| ProcessExternalMeetingMessages | False | Requests from external senders are rejected |
Note the last three. Many administrators are surprised that a room calendar shows the organizer's name rather than the meeting title. That is the default, not a fault.
The AutomateProcessing value matters. None disables calendar processing completely. AutoUpdate means only the Calendar Attendant works and requests stay tentative until a delegate approves. AutoAccept enables the resource booking attendant, which is what makes the booking rules in this article work. Resource mailboxes created in PowerShell before 15 November 2018 default to AutoUpdate, so set it explicitly on old resources.
Configure who can book and how
Open booking with limits
The default already allows anyone to book. Add limits that suit a typical office:
Set-CalendarProcessing -Identity [email protected] `
-AutomateProcessing AutoAccept `
-BookingWindowInDays 90 `
-MaximumDurationInMinutes 480 `
-ScheduleOnlyDuringWorkHours $true `
-DeleteSubject $false `
-AddOrganizerToSubject $falseThis accepts bookings up to 90 days ahead, caps meetings at eight hours, declines requests outside the mailbox's working hours and keeps the real subject visible. Working hours default to 8:00 to 17:00 Monday to Friday and can be changed with the WorkDays, WorkingHoursStartTime, WorkingHoursEndTime and WorkingHoursTimeZone parameters of Set-MailboxCalendarConfiguration.
By default a recurring meeting that runs past the booking window is declined, because EnforceSchedulingHorizon defaults to true. Set it to false if you would rather accept the series and have Exchange trim it to the window.
To apply a rule to every room at once, filter by recipient type, as the Microsoft documentation does:
Get-Mailbox -ResultSize Unlimited -Filter "RecipientTypeDetails -eq 'RoomMailbox'" | Set-CalendarProcessing -ScheduleOnlyDuringWorkHours $true -MaximumDurationInMinutes 540Restrict booking to named people
For a resource such as a company car, allow only specific users or a non-nested group to book. Everyone else is declined automatically:
Set-CalendarProcessing -Identity [email protected] `
-AutomateProcessing AutoAccept `
-AllBookInPolicy $false `
-BookInPolicy "[email protected]","[email protected]"Microsoft calls this scoped auto-approval: AutomateProcessing is AutoAccept, ForwardRequestsToDelegates is false, AllBookInPolicy is false, AllRequestInPolicy is false and BookInPolicy lists the approved bookers.
Require approval from a delegate
For a high-demand room or expensive equipment, let anyone request but require an approver:
Set-CalendarProcessing -Identity [email protected] `
-AutomateProcessing AutoAccept `
-AllBookInPolicy $false `
-AllRequestInPolicy $true `
-ResourceDelegates "[email protected]","[email protected]"ForwardRequestsToDelegates defaults to true, so requests go to the delegates. If you assign more than one delegate, only one of them has to act on a request. Give the delegates access to the calendar folder so they can see it:
Set-MailboxFolderPermission -Identity "[email protected]:\Calendar" -User [email protected] -AccessRights Editor -SharingPermissionFlags DelegateRepeat for each delegate. In the admin centre the same choice is under the Booking tab, Manage delegate settings.
Two further scenarios are worth knowing. -AllRequestOutOfPolicy lets all users submit requests that break the policy limits (for example, too long) for delegate approval, and -RequestOutOfPolicy does the same for named users only. Use these when you want most people held to the limits but a few exceptions to be approved by hand.
Allow external organisers
If partners or customers send invitations to the room, set:
Set-CalendarProcessing -Identity [email protected] -ProcessExternalMeetingMessages $trueGroup rooms into a room list
Room lists are distribution groups that contain only room mailboxes. Microsoft recommends them if you have, or expect, more than 100 rooms, or rooms in several buildings. You can create room lists only in PowerShell, not in the admin centre.
New-DistributionGroup -Name "HQ Meeting Rooms" -RoomList
Add-DistributionGroupMember -Identity "HQ Meeting Rooms" -Member [email protected]To turn an existing distribution group that already holds rooms into a room list:
Set-DistributionGroup -Identity "Building 34 Conference Rooms" -RoomListIf you want a room hidden from the address book, use Manage hide from GAL on the General tab of the resource. A hidden resource can still be booked by anyone who types its email address.
Verify the setup
-
Confirm the mailbox type:
Get-Mailbox -Identity [email protected] | Format-List Name,RecipientTypeDetails,PrimarySmtpAddressYou should see
RoomMailboxorEquipmentMailbox. -
Confirm the booking policy with the
Get-CalendarProcessingcommand shown earlier. -
List all resources:
Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails EquipmentMailbox,RoomMailbox. -
Confirm room lists and their members:
Get-DistributionGroup -ResultSize Unlimited -RecipientTypeDetails RoomList Get-DistributionGroupMember -Identity "HQ Meeting Rooms" -
Send a real test: as a normal user, create a meeting in Outlook and add the room as a resource or in the Location field. Book the same slot from a second account to confirm the conflict is declined. Then try a meeting longer than your maximum and one outside the booking window, and check the decline message.
Troubleshooting
The room never responds to invitations
Check AutomateProcessing. If it is None or AutoUpdate, requests are not accepted automatically. This is most likely on resources created in PowerShell before 15 November 2018. Set it to AutoAccept.
Requests are declined that should be allowed
Look at the limits first: MaximumDurationInMinutes, BookingWindowInDays and ScheduleOnlyDuringWorkHours. A recurring series is declined when it extends beyond the booking window while EnforceSchedulingHorizon is true, and when any occurrence conflicts while AllowConflicts is false. ConflictPercentageAllowed and MaximumConflictInstances both default to 0.
Delegates never receive requests
Delegate routing needs AutomateProcessing set to AutoAccept, ForwardRequestsToDelegates true, AllBookInPolicy false and AllRequestInPolicy true (or the out-of-policy equivalents). The Set-CalendarProcessing reference also notes that setting AutoUpdate on a room mailbox means delegates do not get requests at all.
Group values do not work
Nested groups are not supported in resource mailbox settings. Use a flat, non-nested group in BookInPolicy, RequestInPolicy or ResourceDelegates.
The meeting title is missing
This is the DeleteSubject and AddOrganizerToSubject default behaviour described above. Set both to false. Users also need at least the LimitedDetails role on the resource's calendar folder to see subjects, because the default AvailabilityOnly role hides them.
Attachments and body text are stripped
DeleteAttachments and DeleteComments also default to true, so attachments and body text in incoming requests are removed. Set them to false if people rely on the invitation body in the room's calendar.
Synchronised room properties will not change
In hybrid setups, edit them on-premises as described under Set-Place above.
Checklist
- Naming convention agreed, mailboxes created with
New-Mailbox -Roomor-Equipment. AutomateProcessingisAutoAccepton every resource.- Booking window, maximum duration and working-hours limits set deliberately.
- Restricted resources use
BookInPolicy; approval resources useResourceDelegateswith calendar permissions. - Subject, body and attachment settings chosen on purpose.
- Room lists created for each building and populated.
- Test bookings run, including conflict, overlong and out-of-window cases.
If your resources become busy shared inboxes rather than calendars, see /blog/shared-mailbox-vs-microsoft-365-group for when each mailbox type fits, and /blog/calendar-permissions-exchange-online-powershell for managing calendar folder permissions.
References
- Manage resource mailboxes in Exchange Online: https://learn.microsoft.com/en-us/exchange/recipients-in-exchange-online/manage-resource-mailboxes
- Set-CalendarProcessing: https://learn.microsoft.com/en-us/powershell/module/exchangepowershell/set-calendarprocessing
- Set-Place: https://learn.microsoft.com/en-us/powershell/module/exchangepowershell/set-place
- New-Mailbox: https://learn.microsoft.com/en-us/powershell/module/exchangepowershell/new-mailbox
- Connect to Exchange Online PowerShell: https://learn.microsoft.com/en-us/powershell/exchange/connect-to-exchange-online-powershell
Comments
Questions and tips are welcome. Comments are checked by the EpiFive team before they appear; please do not share passwords, phone numbers or other private details.