
Understand, report and update the settings of your Microsoft 365 Room Mailboxes and Teams Rooms
RoomSettings.ps1

A small interactive PowerShell utility to report and update Teams Room settings.
See IT Automator script here: Room Settings
Overview
Room settings can be configured to adjust the subject, message, and
other details of an appointment to protect privacy and obscure
information.
Use these settings carefully and read the notes before using these
commands.
These settings are adjusted using the cmdlets.
Connect-ExchangeOnline
Get-CalendarProcessing
Set-CalendarProcessing
Usage
Double-click RoomSettings.cmd to show the main menu.
Settings
Microsoft details about these settings
Microsoft Source: How to create and configure resource accounts for Teams Rooms and
panels
Exchange mailbox properties
Based on organizational requirements, you may wish to customize how the
resource account responds to and processes meeting invitations. Using
Exchange PowerShell, you can set many properties, review
the Set-CalendarProcessing cmdlet
for all available configurations.\
The following are Microsoft recommended for Teams Rooms (in bold):
-
AutomateProcessing: AutoAccept \
Meeting organizers receive the room reservation decision directly
without human intervention.\
General Recommendation: Leave this alone. -
AddOrganizerToSubject: \$false\
The meeting organizer isn\’t added to the subject of the meeting
request on the resource account calendar.\
General Recommendation: Leave false. Change to true if
DeleteSubject is true so that the room shows the organizer in the
title. -
AllowRecurringMeetings: \$true\
Recurring meetings are accepted.
General Recommendation: Leave true. Based on company policy. -
DeleteAttachments: \$true\
Teams Rooms devices can\’t access meeting attachments, deleting
attachments ensures they\’re not stored on the resource account
calendar.
General Recommendation: Leave true. -
DeleteComments: \$false\
Keep any text in the message body of incoming meeting requests which
is required to create join buttons for third-party
meetings on
a Teams Rooms device.
General Recommendation: Leave false. Warning: changing to true will break 3rd party meetings (see link above) like Zoom. Teams is not affected by this — it uses other internal properties. -
DeleteSubject: \$false\
Keep the subject of incoming meeting requests on the resource
accounts calendar.
General Recommendation: Leave false. Change to true to hide subject (but then also set AddOrganizerToSubject to true) -
ProcessExternalMeetingMessages: \$true\
Specifies whether to process meeting requests organized outside your Exchange environment. This option is required for meeting invites sent directly by an external organizer as well as external organized meetings forwarded by an internal user.\
General Recommendation: Leave true – unless there is concern about spam bookings from outside the company -
RemovePrivateProperty: \$false\
Ensures the private flag that sent by the meeting organizer in the original meeting request remains as specified. -
AddAdditionalResponse: \$true\
The text specified by the AdditionalResponse parameter is added to meeting requests. -
AdditionalResponse: \”This is a Microsoft Teams Meeting room!\”\
The text to add to the meeting acceptance body. You can also format HTML content in the automatic reply if you wish.\
General Recommendation: Don’t change these -
MTREnabled: \$false\
True\
The room is marked as a Microsoft Teams Room. This typically means: The mailbox represents a physical space with a Teams Room device (like a Surface Hub or certified MTR console).\
Teams and Outlook will treat the room as a “Teams Meeting Room,” showing “Join” buttons on the device and enabling room-specific experiences.\
This value may be set manually or via provisioning (e.g., when creating an MTR account following Microsoft’s guidance).False\
The room is a normal meeting room without any Teams Room device integration. It can still be scheduled for Teams meetings, but it won’t behave as a dedicated MTR device\
General Recommendation: Don’t change this. It seems to always be false for now even though the docs say it should be true -
Capacity: 12\
The number of people that the room can fit. Informational\
General Recommendation: Set to room capacity -
Calendar Permission: AvailabilityOnly\
This is the calendar default permission (that is visible to all Org). More Info from Microsoft: link\
AvailabilityOnly means show free-busy information only (not even subject is visible)\
LimitedDetails means show subject but nothing else\
GeneralvRecommendation:\
AvailabilityOnly for most rooms.\
LimitedDetails if DeleteSubject is true and there is an org-wide need to find the person who booked the room in case of conflicts. This would be the case if there were no known room personnel to check the calendar.\
LimitedDetails if DeleteSubject is false for small orgs that are OK exposing the title of every booked meeting.
Reports
The CSV reports outputs the following information for all Room Mailboxes in the tenant (whether they are Teams Room licensed or not)\
The Updates CSV uses these same fields
Columns
| Column | Value (sample) | Description (*see info above) |
|---|---|---|
| DisplayName | Marketing Conference Rm | (view-only info) |
| UserPrincipalName | mkt_conf_room@domain.com | (required key field) |
| Perm_CalendarDefault | AvailabilityOnly | * AvailabilityOnly or LimitedDetails if Org wants to see room calendar |
| Place_Capacity | 8 | The # of people the room can have |
| Place_City | London | |
| Place_MTREnabled | FALSE | (Generally false ) |
| Place_AudioDeviceName | Descriptive info – generally blank | |
| Place_VideoDeviceName | Descriptive info – generally blank | |
| Proc_AddOrganizerToSubject | TRUE | *Appends the organizer name to the subject |
| Proc_DeleteSubject | TRUE | *Strips Subject (use with AddOrganizerToSubject) |
| Proc_DeleteAttachments | TRUE | *Strips Attachments |
| Proc_DeleteComments | TRUE | *Strips Body (caution: removes 3rd party links) |
| Proc_AutomateProcessing | AutoAccept | This should always be AutoAccept |
| Proc_AllowRecurringMeetings | TRUE | FALSE: Do not allow recurring meetings |
| Proc_ProcessExternalMeetingMessages | TRUE | *FALSE: Organizer must be internal |
| Proc_RemovePrivateProperty | FALSE | TRUE: Removes the property called Private |
| Proc_AddAdditionalResponse | FALSE | TRUE: Add text from below field |
| Proc_AdditionalResponse | Text response to append to booking response – generally blank | |
| Proc_AllowConflicts | FALSE | TRUE: Allow overlapping meetings |
| Proc_BookingWindowInDays | 180 | How far advanced booking can be in days |
| Proc_MaximumDurationInMinutes | 1440 | How long a meeting can be in mins |
| AccountEnabled | TRUE | (view-only info) |
| LicenseInfo | Teams Room Basic | License assigned to room (if any) (view-only info) |
| PasswordExpiryDate | (if the org expires passwords) | |
| Warnings | Any warnings detected by this code are shown here |
Warnings
Here are the various warnings that the code detects
- AutomateProcessing should be AutoAccept
- Recurring meetings are NOT allowed
- AllowConflicts is TRUE (may lead to double-booking)
- External meeting messages are processed (may allow spam bookings)
- Comments (message body) is deleted – may remove 3rd party links
- Subjects are deleted – but organizer is NOT added to subject – may make it hard to identify meetings
- Calendar Default permission is ‘$room_mb_perm_str’ (should be ‘AvailabilityOnly’ for free-busy or ‘LimitedDetails’ for subject-only)
- No license assigned
- Accounts with Teams room licenses should have a DisablePasswordExpiration policy (if the org expires passwords)
- Account is disabled
Notes
Deleting the Message Body
This will remove 3rd party links (Zoom). Teams is not affected by this. See here for more info: Third-party meetings on Teams Rooms
Password Change
Rooms should be exempt from regular password changes. Microsoft by default does not change passwords at the org level. If your org has password expiration configured, change the room user’s password policy setting to not expire.\
See Microsoft info here: Set password to never expire\
See IT Automator useful script here: User Password Expiration Manager
Teams Rooms Visibility
Teams Rooms (by themselves) show limited information (just the subject) on their scheduling panels.
Subject\
The room panels show the subject. For sensitive topics this may be undesirable. The above settings can replace the subject with the name of
the organizer.
Message Body and Attachments\
Message body and attachments do not appear on the scheduling or control panels, either before or during the meeting.\
For this reason, hiding the body and attachments only becomes necessary if the room calendar is visible to employees outside the room who should not normally see the
information.\
Warning: stripping the body will cause 3rd party join links to fail.
Calendar Visibility via Sharing and Permissions
Notwithstanding the Set-CalendarProcessing settings described above, you can also adjust the room calendar’s visibility via the Sharing and
Permissions settings that are common to all user calendars.
Set-CalendarProcessing (covered above)\
This strips and permanently changes the calendar items. Only used in rooms. This is independent of sharing and permissions.
Sharing and Permissions (covered here)\
Outlook > Calendar > Properties > Sharing and Permission\
This controls how others can see the calendar from their Outlook. All
users have this control — by default it shares free-busy information.\
Microsoft information is here: Sharing Calendars
The ‘people in my organization’ is set to (as a default) free-busy (aka can view when I’m busy) to the entire company. This is the minimum setting.
You can share the calendar with specific people by adding user entries
and using the ‘Can view titles and locations‘ setting. This will share
subjects but not message body or attachment contents.
Powershell Commands
# Required Module: uninstall
Uninstall-Module ExchangeOnlineManagement -AllVersions
# Required Module: installs, loads,
Install-Module ExchangeOnlineManagement # installs from online
Import-Module ExchangeOnlineManagement # loads an installed module into memory
# Required Module: Check for new version
Get-Module ExchangeOnlineManagement -ListAvailable # shows whats locally installed
Find-Module ExchangeOnlineManagement # shows whats online
Update-Module ExchangeOnlineManagement # updates (if installed)
# This connects to 365 using module ExchangeOnlineManagement
Connect-ExchangeOnline # Connects to tenant
Connect-ExchangeOnline –Device # (PS7 only) Use open web page with pasted code.
Disconnect-ExchangeOnline # Disconnect from tenant
# Get a list of room mailboxes in the tenant
Get-Mailbox -RecipientTypeDetails RoomMailbox |
Select-Object DisplayName, PrimarySmtpAddress
# Show all rooms’ settings
$mbps = $mbs.PrimarySmtpAddress | Get-CalendarProcessing
$mbps | Select-Object Identity, AutomateProcessing, AddOrganizerToSubject, AllowRecurringMeetings, DeleteAttachments, DeleteComments, DeleteSubject, ProcessExternalMeetingMessages | Out-GridView
# Done
# Gets a room's settings
Get-CalendarProcessing -Identity 'room@domain.com' | Select-Object DisplayName, AutomateProcessing, AddOrganizerToSubject, AllowRecurringMeetings, DeleteAttachments, DeleteComments, DeleteSubject, ProcessExternalMeetingMessages
# Done
# Sets a room to Microsoft's default recommended settings
Set-CalendarProcessing -Identity 'RoomMailbox' `
-AutomateProcessing AutoAccept `
-AddOrganizerToSubject $false `
-AllowRecurringMeetings $true `
-DeleteAttachments $true `
-DeleteComments $false `
-DeleteSubject $false `
-ProcessExternalMeetingMessages $true
