Home Tools Exchange Room Mailbox PowerShell Generator

Exchange Online room mailbox PowerShell generator

Comprehensive cmdlet library for managing room mailboxes in Exchange Online — calendar booking policies, Set-CalendarProcessing options explained, delegates & calendar editors, Set-Place for Room Finder, room lists, workspaces, and bulk CSV patterns. 55+ cmdlets with WHY explanations, shared variables persisted to your browser, and copy-ready output.

This tool is provided as-is, for educational and planning purposes only. All cmdlets target Exchange Online with the ExchangeOnlineManagement module (v3+). Test in a non-production tenant first; some operations (e.g. Set-CalendarProcessing -DeleteSubject + AddOrganizerToSubject ordering) affect existing meetings. The Tech Space makes no warranty and accepts no liability. Full disclaimer →

Variables · fill in your values

Persisted to your browser. Used in all cmdlets below.

1. Connection

Every cmdlet below assumes you have an authenticated session against your Exchange Online tenant. The ExchangeOnlineManagement v3 module is the supported path — the older Connect-MsolService / Remote PowerShell flows are deprecated.

Modern auth + MFA Connect-ExchangeOnline uses interactive browser auth by default and works with conditional access / MFA out of the box. For unattended automation use -CertificateThumbprint with an app registration (Application.ReadWrite.All + Exchange.ManageAsApp).

2. Create the room mailbox

A room mailbox is a special RecipientTypeDetails = RoomMailbox object. It has no licence (in Exchange Online room mailboxes are free for up to 25 GB) and no password — sign-in is disabled. The basics are New-Mailbox -Room followed by Set-Mailbox for the resource capacity.

Capacity & type ResourceCapacity on Set-Mailbox is what Room Finder shows. Set-Place -Capacity also sets it and is the newer canonical surface — they're synced. Use Set-Place going forward.

3. Calendar booking policy

Set-CalendarProcessing controls every aspect of how the room responds to meeting requests — whether it auto-accepts, who can book outside hours, what gets stripped from subject lines, who approves out-of-policy requests, and so on. The default AutomateProcessing = AutoAccept is right for most rooms; locked-down spaces need AutoUpdate + delegates.

AutomateProcessing modes — the most important setting AutoAccept books automatically (no human). AutoUpdate tentatively books and emails the resource delegates for approval. None disables all auto-processing — every request sits until someone manually accepts. Most rooms want AutoAccept; boardrooms / executive spaces want AutoUpdate.

Inspect current policy

AutomateProcessing modes

Booking window & duration

Subject / body cleanup

Conflicts & recurring meetings

In-policy / out-of-policy gates

The += trick — incremental add / remove (READ THIS) Set-CalendarProcessing -BookInPolicy "newuser@…" REPLACES the entire list and silently drops every existing member. For one-off adds, always read-modify-write: (Get-CalendarProcessing -Identity X).BookInPolicy += "newuser@…" appends; use -= "user@…" to remove. Same trick works for RequestInPolicy, RequestOutOfPolicy, and ResourceDelegates. The incremental cmdlets below show the full safe form.

External meeting requests

"Set the standard policy" — one-shot

A sensible default for most general-purpose rooms. Auto-accept, 6-month booking window, 4-hour max meeting, allow recurring, keep subject + organizer.

4. Delegates, calendar editors & permissions

There are two distinct concepts here that are routinely confused:

  1. Resource delegates (Set-CalendarProcessing -ResourceDelegates) — when AutomateProcessing = AutoUpdate, these are the people who get the approval email for tentative bookings. They aren't given any calendar permissions automatically.
  2. Calendar folder permissions (Add-MailboxFolderPermission) — these give users the ability to see / edit / manage entries on the room's calendar in Outlook. Reviewer = read-only, Editor = create + edit + delete, Owner = full control.
Role cheat sheet Owner = read, edit, delete, change permissions · PublishingEditor = read, edit, delete, create sub-folders · Editor = read, edit, delete · PublishingAuthor / Author = read, create + edit/delete own · NonEditingAuthor = read, create, delete own · Reviewer = read-only · Contributor = create only (no read) · AvailabilityOnly = free/busy only · LimitedDetails = free/busy + subject + location · None = no access.

Read current permissions

Calendar editors / delegates / reviewers

Change or remove a permission

Send-on-behalf & Send-as

Resource delegates (approval workflow)

5. Room Finder properties (Set-Place)

Set-Place is what powers the Room Finder pane in Outlook on the Web and the new Teams meeting scheduler. Without these properties set, the room appears in Get-Mailbox but is invisible to Room Finder filters (capacity, building, floor, AV equipment).

Room Finder visibility requires BOTH 1. Properties set via Set-Place (Building, Floor, Capacity, etc.), AND
2. Membership in a Room List (distribution group with -RoomList flag). A room with Set-Place applied but no RoomList membership is queryable via Get-Place but won't show in the Outlook Room Finder dropdown.

Read current properties

Building & floor

Capacity & accessibility

Address & geo

AV equipment metadata

Tags (custom search keywords)

Full Set-Place — every property at once

6. Room lists

A room list is just a regular distribution group with the -RoomList flag — but that flag is what makes Outlook show "Building" and "Capacity" filters in Room Finder. One room can belong to multiple lists (e.g. "Sydney HQ" and "Has video conferencing").

7. Workspace mailboxes

Workspace mailboxes are RecipientTypeDetails = WorkspaceMailbox — like rooms but designed for hot-desking. Critical difference: the default booking policy allows multiple concurrent bookings (per-seat capacity) — AllowConflicts = $true. Don't set them up like rooms or you'll lose the whole point.

Capacity = number of seats For a workspace, Set-Place -Capacity is the number of bookable seats at the same time. Set AllowConflicts $true on Set-CalendarProcessing too, otherwise concurrent bookings get auto-declined.

8. Diagnostics & reports

Find all rooms, audit booking settings, dig into why a specific meeting got declined, export tenant-wide.

9. Bulk CSV patterns

For new building rollouts. CSV column names match cmdlet parameters so the loops stay short.

CSV format Save your CSV as UTF-8 with a header row. Quote any value containing commas. Import-Csv exposes columns as object properties — reference them as $_.ColumnName inside the ForEach-Object block.

Reference