If you want to allow external users for booking and adding your Exchange room calendars in Outlook, you have to do the following two steps for the specified Room Mailbox.

It doesn’t matter if the Room Mailbox is homed in Exchange Online or On-Premises, the cmdlets are available in on-premises Exchange and in the cloud-based service.


Fist we will need to allow anonymous access to the calendar free and busy time for the specific room. After that anyone who knows the URL can add the calendar in Outlook. By default the DetailLevel is set to AvailabilityOnly so that external users can’t see meeting details.

To determine the actual settings you can enter the following cmdlet by using the on-premise Exchange Management Shell or in case the room mailbox is homed in Exchange Online, the Exchange Online PowerShell V2 module.

For Exchange Online
if not already installed, you first need to install the Exchange Online PowerShell V2 module.
https://www.powershellgallery.com/packages/ExchangeOnlineManagement/2.0.5

Install-Module -Name ExchangeOnlineManagement -RequiredVersion 2.0.5

Import-Module ExchangeOnlineManagement
$credential = Get-Credential
Connect-ExchangeOnline -Credential $credential -ShowProgress $true


In my case the room mailboxes are homed in Exchange on-premises and my lab environment, which is also configured as Exchange Hybrid Classic Full, where some of the mailboxes are homed in Exchange Online and some in on-premises.

About how to configure Exchange Hybrid Classic Full, you can read my following post.


So now as mentioned I will first check the actual settings for the specified room about anonymous access to the room calendar free and busy time as follows.

[PS] C:\Windows\system32>Get-MailboxCalendarFolder Room1:\Calendar | Select *publish*


PublishEnabled       : False
PublishDateRangeFrom : ThreeMonths
PublishDateRangeTo   : ThreeMonths
PublishedCalendarUrl :
PublishedICalUrl     :



[PS] C:\Windows\system32>


As PublishEnabled is set to False, I will need to enable anonymous access for this calendar as follows.

[PS] C:\Windows\system32>Set-MailboxCalendarFolder Room1:\Calendar -PublishEnabled $true
[PS] C:\Windows\system32>


Another check will show me the permission levels and URLs to access the published calendar. The PublishedCalendarUrl can be used to open the calendar in a browser and the PublishedICalUrl can be used to add the calendar in Outlook.

[PS] C:\Windows\system32>Get-MailboxCalendarFolder Room1:\Calendar


RunspaceId                      : 2160cacc-adaf-????-????-c5e19c9e14f5
Identity                        : braintesting.de/Braincourt/Resources/Room 1:\Calendar
PublishEnabled                  : True
PublishDateRangeFrom            : ThreeMonths
PublishDateRangeTo              : ThreeMonths
DetailLevel                     : AvailabilityOnly
SearchableUrlEnabled            : False
PublishedCalendarUrl            : http://mail.braintesting.de/owa/calendar/04c12????????????23bc7@braintesting.net/941??????????????????00e935
                                  354?????????1317579/calendar.html
PublishedICalUrl                : http://mail.braintesting.de/owa/calendar/04c1????????????????bc7@braintesting.net/94?????????????????100e935
                                  35????????????317579/calendar.ics
ExtendedFolderFlags             : SharedViaExchange, ExchangePublishedCalendar
ExtendedFolderFlags2            :
CalendarSharingFolderFlags      : None
CalendarSharingOwnerSmtpAddress :
CalendarSharingPermissionLevel  : Null
SharingLevelOfDetails           : None
SharingPermissionFlags          : None
SharingOwnerRemoteFolderId      : AAA=
IsValid                         : True
ObjectState                     : Changed



[PS] C:\Windows\system32>


The second and last step is to enable process external meeting, which allows external senders to make bookings in the room mailbox calendar by inviting it to the appointment.

First you can list all your Room Mailboxes as follows.

[PS] C:\Windows\system32>Get-Mailbox -RecipientTypeDetails RoomMailbox

Name                      Alias                ServerName       ProhibitSendQuota
----                      -----                ----------       -----------------
Room 1                    Room1                mail             Unlimited
Room 2                    Room2                mail             Unlimited
Room 3                    Room3                mail             Unlimited


[PS] C:\Windows\system32>


To check if Calendar Processing is still enabled or not for the specified room calendar, you can enter the following cmdlet

[PS] C:\Windows\system32>Get-Mailbox "Room 1" | Get-CalendarProcessing | Select *external*

ProcessExternalMeetingMessages
------------------------------
                         False


[PS] C:\Windows\system32>


Finally you can enable Calendar Processing for the room calendar as follows.

[PS] C:\Windows\system32>Get-Mailbox "Room 1" | Set-CalendarProcessing -ProcessExternalMeetingMessages $true
[PS] C:\Windows\system32>


From now on external users can add the room calendar in their Outlook and invite the calendar for appointments as room.

The calendar will accept or reject the request, based on the availability of the room and its policies.

In order to enable automatic accept or decline of booking request, be sure to select the option Accept or decline booking requests automatically as follows.




Links

Set-MailboxCalendarFolder
https://docs.microsoft.com/en-us/powershell/module/exchange/set-mailboxcalendarfolder?view=exchange-ps

Set-CalendarProcessing
https://docs.microsoft.com/en-us/powershell/module/exchange/set-calendarprocessing?view=exchange-ps