Exchange OnlineHow-to

Room and equipment mailboxes in Exchange Online: creation, booking policies and Room Finder

Create room and equipment mailboxes, tune Set-CalendarProcessing (auto-accept, conflicts, booking window, delegates), build room lists and Set-Place metadata for Room Finder, and fix the usual booking complaints.

Meeting rooms generate a surprising share of help desk tickets: the room "didn't accept", a recurring series was declined, visitors can't book, or the room never shows up in Room Finder. Almost all of it comes down to a handful of calendar processing settings and some metadata on the mailbox. In this post I'll create room and equipment mailboxes, walk through the booking policy parameters that matter and what their defaults are, set up room lists and Room Finder properties, and go through the booking problems you'll actually be asked about.

How this guide is organised: Prerequisites → Step-by-step → Verify → Tips & gotchasFlow diagram of the article's sections in reading order: 1. Prerequisites. 2. Step-by-step (3 steps: Create the mailboxes; Set the booking policy; Room lists and Room Finder metadata). 3. Verify. 4. Tips & gotchas. Toolbox: Set-Place, Set-MailboxCalendarConfiguration, Connect-ExchangeOnline, Recipients › Resources, AutoAccept.1Prerequisites2Step-by-step3Verify4Tips & gotchas1Create the mailboxes2Set the booking policy3Room lists and RoomFinder metadataTOOLBOXSet-PlaceSet-MailboxCalendarConfigurationConnect-ExchangeOnlineRecipients › ResourcesAutoAcceptHow this guide is organised: Prerequisites → Step-by-step → Verify → Tips & gotchasFlow diagram of the article's sections in reading order: 1. Prerequisites. 2. Step-by-step (3 steps: Create the mailboxes; Set the booking policy; Room lists and Room Finder metadata). 3. Verify. 4. Tips & gotchas. Toolbox: Set-Place, Set-MailboxCalendarConfiguration, Connect-ExchangeOnline, Recipients › Resources, AutoAccept.1Prerequisites2Step-by-step1Create the mailboxes2Set the booking policy3Room lists and Room Finder metadata3Verify4Tips & gotchasTOOLBOXSet-PlaceSet-MailboxCalendarConfigurationConnect-ExchangeOnlineRecipients › ResourcesAutoAccept
At a glance: how this guide is organised · 3 steps · 5 key settings and tools

Prerequisites#

  • Exchange Online PowerShell V3 (Connect-ExchangeOnline); Microsoft specifically recommends the V3 module for Set-Place, and room lists can only be created in PowerShell.
  • A role with the Recipients permissions (Organization Management or Recipient Management).
  • No licence for the resource mailboxes themselves; they get 50 GB without one. In hybrid, create rooms for cloud users in Exchange Online and rooms for on-premises users on-premises.
  • A naming convention: Microsoft suggests putting the important details (building, floor, capacity) in the display name because that's what users see in the address book.

Step 1: Create the mailboxes#

In the Exchange admin center go to Recipients › Resources and choose Add a room resource or Add an equipment resource; the wizard also asks for capacity, location and the first booking options. In PowerShell:

PowerShell
Connect-ExchangeOnline
New-Mailbox -Name CAI-01-Boardroom -Room -DisplayName "Cairo 1F Boardroom (12)" -PrimarySmtpAddress boardroom.cai1@contoso.com
New-Mailbox -Name Projector-02 -Equipment -DisplayName "Portable projector 2"
Get-Mailbox -RecipientTypeDetails RoomMailbox,EquipmentMailbox -ResultSize Unlimited | Format-Table Name, DisplayName, PrimarySmtpAddress

Room mailboxes created in the admin center or in PowerShell get AutomateProcessing set to AutoAccept; Microsoft notes that resource mailboxes created in PowerShell before 15 November 2018 defaulted to AutoUpdate, and a mailbox that started life as a user mailbox and was converted with Set-Mailbox -Type Room deserves a check too.

Step 2: Set the booking policy#

Everything about how a room answers lives in Set-CalendarProcessing. The three building blocks Microsoft documents are:

  • Default booking: AutomateProcessing AutoAccept and AllBookInPolicy $true. Anyone books; free is accepted, busy is declined.
  • Delegate approval: AutoAccept, AllBookInPolicy $false, AllRequestInPolicy $true, ForwardRequestsToDelegates $true and a ResourceDelegates list. Requests sit tentative until a delegate acts.
  • Scoped auto-approval: AutoAccept, AllBookInPolicy $false, AllRequestInPolicy $false, ForwardRequestsToDelegates $false and a BookInPolicy list of users or (non-nested, non-dynamic) groups. Everyone else is declined.
ParameterDefaultWhat it controls
AllowConflicts$falseWhether double bookings are accepted; with $false a series is judged by the two conflict settings below
ConflictPercentageAllowed / MaximumConflictInstances0 / 0How many occurrences of a recurring request may clash before the whole series is declined; at 0, a single clash declines it
AllowRecurringMeetings$trueWhether recurring requests are accepted at all
BookingWindowInDays180 (0-1080)How far ahead the room can be booked
EnforceSchedulingHorizon$trueDeclines a series that runs past the booking window; $false accepts it and trims the later occurrences
MaximumDurationInMinutes1440Longest single meeting (per occurrence for a series); 0 means unlimited
ScheduleOnlyDuringWorkHours$falseRejects requests outside the mailbox's working hours, which come from Set-MailboxCalendarConfiguration (WorkDays, WorkingHoursStartTime, WorkingHoursEndTime, WorkingHoursTimeZone)
ProcessExternalMeetingMessages$falseWhether requests from outside the organisation are processed
DeleteSubject / AddOrganizerToSubject / DeleteComments$trueReplace the subject with the organiser's name and strip the body
RemovePrivateProperty$trueClears the private flag on bookings
AddAdditionalResponse / AdditionalResponse$falseCustom text appended to the room's reply
TentativePendingApproval$truePending delegate requests show as tentative instead of free
PowerShell
Set-CalendarProcessing -Identity boardroom.cai1@contoso.com -AutomateProcessing AutoAccept -AllBookInPolicy $true `
    -BookingWindowInDays 365 -MaximumDurationInMinutes 480 -ConflictPercentageAllowed 10 -MaximumConflictInstances 3 `
    -DeleteSubject $false -AddOrganizerToSubject $false -AddAdditionalResponse $true `
    -AdditionalResponse "Please release the room if your meeting is cancelled."
# Let people see what the room is booked for (Default is AvailabilityOnly)
Set-MailboxFolderPermission -Identity "boardroom.cai1@contoso.com:\Calendar" -User Default -AccessRights LimitedDetails

To add someone to BookInPolicy without wiping the existing list, read the current value, append, and write it back; the parameter replaces the list every time.

Step 3: Room lists and Room Finder metadata#

Room Finder in Outlook groups rooms by room list (typically one per building) and lets users filter by city, floor, capacity and features. A room list is a special distribution group:

PowerShell
New-DistributionGroup -Name "Cairo HQ rooms" -RoomList
Add-DistributionGroupMember -Identity "Cairo HQ rooms" -Member boardroom.cai1@contoso.com
Set-DistributionGroup -Identity "Old rooms DL" -RoomList      # convert an existing group
Set-Place -Identity boardroom.cai1@contoso.com -City "Cairo" -CountryOrRegion EG -Building "HQ" -Floor 1 -FloorLabel "First floor" `
    -Capacity 12 -AudioDeviceName "Poly Studio" -VideoDeviceName "Poly Studio" -DisplayDeviceName "85-inch display" `
    -IsWheelChairAccessible $true -Tags "Whiteboard","Natural light"
Get-Place -Identity boardroom.cai1@contoso.com | Format-List City, Building, Floor, Capacity, *DeviceName, Tags

Microsoft recommends room lists once you have (or expect) more than 100 rooms or several buildings. In hybrid, Set-Place can't write City, CountryOrRegion, GeoCoordinates, Phone, PostalCode, State or Street on synchronised rooms; set those on-premises with Set-User or Set-Mailbox and let them sync. Metadata changes are not instant in Room Finder, so give them time before you declare them broken. If your tenant is adopting Microsoft Places, the same cmdlet carries the ParentId property that attaches a room to a building or floor in the Places hierarchy.

Verify#

PowerShell
Get-CalendarProcessing -Identity boardroom.cai1@contoso.com | Format-List AutomateProcessing, AllBookInPolicy, BookInPolicy, AllRequestInPolicy,
    ResourceDelegates, ForwardRequestsToDelegates, AllowConflicts, ConflictPercentageAllowed, MaximumConflictInstances,
    BookingWindowInDays, EnforceSchedulingHorizon, MaximumDurationInMinutes, ScheduleOnlyDuringWorkHours, ProcessExternalMeetingMessages
Get-MailboxCalendarConfiguration -Identity boardroom.cai1@contoso.com | Format-List WorkDays, WorkingHours*
Get-DistributionGroup -RecipientTypeDetails RoomList | ForEach-Object { $_.Name; Get-DistributionGroupMember -Identity $_.Identity | Format-Table Name, PrimarySmtpAddress }

Then book three test meetings from a normal user: one in policy (expect an acceptance within a minute or two), one that breaks a rule such as duration (expect a decline that names the reason, because EnableResponseDetails is on by default), and one recurring series with a known clash. Finally open Room Finder in Outlook on the web, pick the room list and confirm the city and capacity filters find the room.

Tips & gotchas#

  • "The room never accepts or declines." Check AutomateProcessing: on AutoUpdate the booking attendant is off and, on a room mailbox, delegates don't even receive the requests. None turns processing off entirely.
  • "Requests just sit as tentative." AllBookInPolicy is $false without working delegates, or ForwardRequestsToDelegates is off; either add ResourceDelegates (and give them Calendar permission) or turn AllBookInPolicy back on.
  • "My weekly meeting was declined." The three usual reasons are a series running past BookingWindowInDays with EnforceSchedulingHorizon on, a single clash with the conflict limits at 0, or AllowRecurringMeetings $false. A series with no end date is treated against the booking window like any other long series.
  • "Our partner can't book the room." External requests are rejected by default; set ProcessExternalMeetingMessages $true on that room only.
  • "The calendar just says the organiser's name." That's AddOrganizerToSubject and DeleteSubject, and users also need at least LimitedDetails on the Calendar folder to read subjects.
  • "Bookings outside office hours get declined." ScheduleOnlyDuringWorkHours is on and the mailbox's time zone or hours are wrong; fix them with Set-MailboxCalendarConfiguration.
  • Don't use nested groups or dynamic distribution groups in BookInPolicy, RequestInPolicy or ResourceDelegates; only flat groups work.

References#

Written and checked against current Microsoft Learn documentation. Test changes with a pilot group before rolling them out to everyone, and if an admin center path has moved since, search for the setting name instead.

Spotted a mistake, or did this fix work differently for you? Email me or message me on LinkedIn — corrections are credited in the article.

OE
Written by

Omer Eltayeb

Independent Microsoft Intune consultant in Cairo, Egypt, former Microsoft Cloud Solutions Architect, Microsoft Certified Trainer and Microsoft Innovative Educator Expert (2024–26) and Microsoft Elevate Educator Expert (2026–27). I share practical, step-by-step guides, study plans, scripts and toolkits for Microsoft Intune, Microsoft Entra ID, Microsoft Defender and Exchange Online with the community.

Microsoft Certified Trainer (MCT) 2026Microsoft Innovative Educator Expert 2025–2026Microsoft Elevate Educator Expert 2026–2027ISC2 Certified Information Systems Security Professional (CISSP)Microsoft 365 Certified: Enterprise Administrator Expert (MS-102)