I was working recently on an issue where a small number of meeting room mailboxes needed to be hidden from the Global Address List in Exchange Online. This is normally accomplished by setting the HiddenFromAddressListsEnabled attribute on the mailbox to $True and within a short period of time it is hidden from users.
In a hybrid Exchange environment where this attribute gets modified depends on where the object is being mastered, on-premises or in the cloud. In my scenario this is where things got interesting, the mailbox was showing as synced from on-premises to the cloud which means it must be updated in Exchange on-premises but we couldn't find it.
Since the meeting room mailbox couldn't be found in on-premises Exchange we next checked in Active Directory where we could clearly see the mailbox we were looking for. While we could modify the HiddenFromAddressListsEnabled attribute directly AD via ADSIEdit this is something that should be avoided as it can introduce other problems into the environment. Comparing a room mailbox that was showing up with a room mailbox that wasn't we saw that the msExchRecipientDisplayType and msExchRecipientTypeDetails attributes were missing.
Since we know that the room mailbox exists in Exchange Online and there is a corresponding account in AD we can use the Enable-RemoteMailbox cmdlet to connect the two together. The syntax to do this is:
Enable-RemoteMailbox <username> -Room -RemoteRoutingAddress <alias>@contoso.mail.onmicrosoft.com -PrimarySMTPAddress <alias>@contoso.com
Once the remote mailbox was connected to the on-premises user in AD we were then able to modify the attribute marking the room as hidden. Following a delay of 30 minutes to allow for synchronization the room was hidden from the GAL.