Show Meeting Details of an Office 365 Room mailbox Calendar

By default, the Room calendar shows a busy status. But in most organizations, you want to see the organizer of the meeting and you might also want to know what the subject is.  To see these room details in an Office 365 room calendar, we need to change a few settings.

Below I will guide you through setting up the room mailbox with PowerShell in 3 steps:

Step 1 – Connect to Exchange Online

To change the room mailbox details we need to connect to Exchange Online with PowerShell. Make sure that you have installed the latest PowerShell Exchange Online module. We are first going to connect to Exchange Online:

Connect-ExchangeOnline

Before we are going to change the room mailbox permissions, we can first get a list in PowerShell with all the room mailboxes:

Get-EXOMailbox -RecipientTypeDetails roommailbox

Step 2 – Set Limited details AccessRights

To show the subject and organizer we first need to give all the users limited access to the calendar. This will display the subject and location of the meeting. You need to use the following Set-MailboxFolderPermission command:

Set-MailboxFolderPermission -Identity Meetingroom:\calendar -User default -AccessRights LimitedDetails

Step 3 – Show the Subject and Organiser

To display also the Organiser of the meeting in the calendar we need to set the following for the Mailbox:

  • AddorganizerToSubject = $true
  • DeleteComments = $false
  • DeleteSubject = $false
Set-CalendarProcessing -Identity Meetingroom -AddOrganizerToSubject $true -DeleteComments $false -DeleteSubject $false

By default, the subject is deleted, so after we set DeleteSubject to $false, only new meeting requests are affected.  For existing meetings you will see the organizer and the location, new meetings will also have the subject displayed as you can see below:

Bonus – Changing multiple Room Mailboxes at once

If you have multiple Room mailboxes you might want to change them all at once, instead of changing the settings for each Room independently. First, we need to get all the Room Mailboxes:

$rooms = Get-ExoMailbox -RecipientTypeDetails RoomMailbox

Before we proceed let’s check if we have the correct mailboxes:

$rooms | ft

This will result in a list (table: ft = formatTable)  of the room mailboxes.
To change the settings on these mailboxes we will loop through them with the following PowerShell command:

# First set the AccessRights 
$rooms | %{Set-MailboxFolderPermission $_":\Calendar" -User Default -AccessRights LimitedDetails} # Display the meetings details $rooms | %{Set-CalendarProcessing $_ -AddOrganizerToSubject $true -DeleteComments $false -DeleteSubject $false}

Close your session when you’re done

When finished, type the following command to close the session:

Remove-PSSession $ExchOnlineSession

57 thoughts on “Show Meeting Details of an Office 365 Room mailbox Calendar”

  1. Hi Ruud. Thanks so much for publishing this, it’s exactly what I was looking for.

    One question – is there a way to show certain details to certain users, but not others?

    So for example, users in Group A can see “organizer” and “title” of the meeting etc, but users in Group B simply see “busy” – they can’t see any details, other than that the room has been booked and isn’t available.

    I’m doing this for a small company, so if doing it by Group/User Role isn’t possible, the option to view more meeting details is only for 2 users anyway, so if I can just apply it manually to them, then that would be fine as well (and everyone else simply sees “busy”).

  2. Hey,
    Thanks for this and all the other useful work you share!
    Is there a way to display organiser name only? I can’t share meeting titles or comments due to privacy concerns.
    Thanks again!

    • Yes, we can remove the subject and add the organizer using the following command:

      Set-CalendarProcessing -Identity -AddOrganizerToSubject $true -DeleteComments $true -DeleteSubject $true

  3. Is there a way to change the order of the how the room meeting shows the Meeting Details? Can the Subject be displayed first, then the Organizer? We use this for a conference room calendar and there are multiple meetings scheduled in a day. When we get more than 2 meetings or have an organizer with a long name you have to change the Calendar view or open the meeting to see what the full meeting title is.

    I’d like it to show: “Meeting_Subject Organizer_Name” instead of “Organizer_Name Meeting Subject”

    Is this possible?

  4. Greetings, this is a nice write up.

    I am not sure if this is a version difference or a view difference I can change.
    Your calendar examples have the information displayed VERTICALLY, my calendar is displaying it HORIZONTALLY.
    Is there a way to change this?

  5. So – a quick question to you all…
    Has anyone found a way to show the room capacity in the calendar at all?
    It is so other invitees can see if there is room for one more, or whether they need to switch to a larger room?
    Thanks all in advance

  6. Hi Ruud!
    Is it not easier to just use this command:
    Set-MailboxFolderPermission homeetingroom1:\Calendar -User Default -AccessRights Reviewer
    ?

    Thanks,

  7. Hi Ruud,

    Hope you can help me, i’ve set up some meetingrooms and filled in the location details (the address of our office). Now i can invite external people, so outside our organisation, but they can’t see the address of the room. Is this possible? I already tried “-User Anonymous -AccessRights LimitedDetails” but that didn’t make any difference.

    Grtz, Mark

  8. This is still working great in 2021! Thanks for the beautiful solution to a problem that seems so obvious Microsoft should have a checkbox somewhere for it. I appreciate your help.

  9. Hello Rudy,

    Thank you for the article, it helped me out with a request that came my way for on-prem Exchange. I have a question however. Is there a way to block anyone from seeing the body of a message in the meeting?

    • I think the best way to solve this is to set the default permission to only Can View Titles and locations. This should prevent them from seeing the meeting details.

      • Hi Rudy,

        Great stuff, thanks for sharing.
        I think I have the same question. How to show all appointments for a mailbox in the past X days (and maybe in the future X days)?

  10. Rudy, if I was just needing to change the attributes for a select group of mailboxes vs. all of them, could this be accomplished? If so, how? I can see all of the resource mailboxes, but out of the list of 100 or so, I only want to update 20, but all at once. Thanks in advance

    • You will have to filter your Rooms select cmd, for example:

      Get all rooms where the name starts with “the”
      $rooms = Get-Mailbox -RecipientTypeDetails RoomMailbox | Where-Object {$_.Name -like 'the*'}

      • Thank you. Unfortunately, not all of the rooms follow a standard. So, it would not be possible to comma separate room names then like so (i.e. Set-CalendarProcessing -Identity “Room 1”,”Room 2″,”Room 3″ -AddOrganizerToSubject $false -OrganizerInfo $true -DeleteAttachments $true -DeleteComments $false -DeleteSubject $false -RemovePrivateProperty $false)?

      • Ok. So, unfortunately, the rooms don’t have a naming standard that would easily separate them. That said, I guess it is not as easy as comma separating the names (i.e. Set-CalendarProcessing -Identity “Room 1”,”Room 2″,”Room 3″ -AddOrganizerToSubject $false -OrganizerInfo $true -DeleteAttachments $true -DeleteComments $false -DeleteSubject $false -RemovePrivateProperty $false)?

          • First off, sorry for the double listing. I did not see the comment posted the first time, so I submitted it again. So, I can create a local file on my machine and include those rooms, and PS will parse the data/info? I am assuming that these directory listings already need to exist in O365. Thanks

    • Can the Organizer’s & Meeting details be exported to a either TXT or CSV file(s); Perhaps, the Meeting Subject and the Organizer, either by name or email address?

  11. Hello there and thanks a lot!

    How can i also allow to display attendees and the meeting agenda (notes) to the other users required? (usually secretary staff)?

    Thanks!

    • You can’t show all the details this way. Normally you make the secretary an editor or maybe owner of the calendar. So if you want to give everyone access to it, you should give everyone editor access, but if that is a good idea..

  12. Thank you Sir, this is exactly what I was looking for. Now all people can see the name of the meeting in shared meeting room calendar.

  13. Thanks for the article! This shows the subject and organiser. Is there a way to show the notes of the appointment aswell?

  14. Thanks for this, just what I was looking for.
    I’m glad I scrolled down to see your bonus tip as I was just thinking about how to easily iterate this through all the rooms!

    FYI, line 5 of your final snippet to set the CalendarProcessing failed for me, complaining;
    “Cannot process argument transformation on parameter ‘Identity’.”

    I had to change it to use “$_.alias” as follows:
    $rooms | %{Set-CalendarProcessing $_.alias -AddOrganizerToSubject $true -DeleteComments $false -DeleteSubject $false}

  15. Please reach out to me if you have anything you’d like to try. I can even share my screen with you if you’d like.

  16. I’m getting an error on the last line of code to set multiple rooms to display the subject and comments. Here’s the error: Cannot process argument transformation on parameter “Identity”. Cannot convert the “[room name]” value of type “Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox” to type “Microsoft.Exchange.Configuration.Tasks.GeneralRecipientIdParameter”.

    I get this error for each room. Got any suggestions?

  17. Hi there,
    great help, but I only have the problem that I cant set the limited access rights as I want to do this not with a room but with a equipment mailbox…
    Best,
    Matthias

    • For an equipment mailbox the commands are the same. Do you get an error? Just double checked it: Set-MailboxFolderPermission -AccessRights limitedDetails test:Calendar -User default and it’s working fine here

  18. I appreciate, cause I found just what I was looking for. You’ve ended my four day long hunt! God Bless you man. Have a great day. Bye

  19. Hi Rudy,

    I just tried this and get the following error. Do I need to substitute our Office 365 domain somewhere?

    New-PSSession : [ps.outlook.com] Connecting to remote server ps.outlook.com failed with the following error message :

    Runtime Error

    body {font-family:”Verdana”;font-weight:normal;font-size: .7em;color:black;}
    p {font-family:”Verdana”;font-weight:normal;color:black;margin-top: -5px}
    b {font-family:”Verdana”;font-weight:bold;color:black;margin-top: -5px}
    H1 { font-family:”Verdana”;font-weight:normal;font-size:18pt;color:red }
    H2 { font-family:”Verdana”;font-weight:normal;font-size:14pt;color:maroon }
    pre {font-family:”Consolas”,”Lucida Console”,Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
    .marker {font-weight: bold; color: black;text-decoration: none;}
    .version {color: gray;}
    .error {margin-bottom: 10px;}
    .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
    @media screen and (max-width: 639px) {
    pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; }
    }
    @media screen and (max-width: 479px) {
    pre { width: 280px; }
    }

    Server Error in ‘/PowerShell’ Application.
    Runtime Error

    Description: An application error occurred on the server. The current custom error settings for
    this application prevent the details of the application error from being viewed remotely (for security reasons). It
    could, however, be viewed by browsers running on the local server machine.

    Details: To enable the details of this specific error message to be viewable on remote machines,
    please create a <customErrors> tag within a "web.config" configuration file located in the root
    directory of the current web application. This <customErrors> tag should then have its "mode"
    attribute set to "Off".

    <!-- Web.Config Configuration File -->
    <configuration>
        <system.web>
            <customErrors mode="Off"/>
        </system.web>
    </configuration>

    Notes: The current error page you are seeing can be replaced by a custom error page by modifying
    the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to
    a custom error page URL.

    <!-- Web.Config Configuration File -->
    <configuration>
        <system.web>
            <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
        </system.web>
    </configuration>

    [ClientAccessServer=ME1PR01CA0105,BackEndServer=UnKnown,RequestId=00000000-0000-0000-0000-000000000000,TimeStamp=3/30/2
    017 5:22:22 AM] For more information, see the about_Remote_Troubleshooting Help topic.
    At line:1 char:12
    + $Session = New-PSSession -ConfigurationName Microsoft.Exchange -Conne …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : OpenError: (System.Manageme….RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotin
    gTransportException
    + FullyQualifiedErrorId : -2144108477,PSSessionOpenFailed
    Import-PSSession : Cannot validate argument on parameter ‘Session’. The argument is null. Provide a valid value for
    the argument, and then try running the command again.
    At line:3 char:18
    + Import-PSSession $Session
    + ~~~~~~~~
    + CategoryInfo : InvalidData: (:) [Import-PSSession], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.ImportPSSessionCommand

    Thanks for any help you can give… The “Busy” non-description is driving everyone to distraction!

    Cheers,
    Flip

    • Hi Flip,

      Thanks for reaching out. The posted code for connecting to Exchange Online doesn’t seem to work indeed. I changed the post, use the following code instead:

      [code]
      $ExchOnlineSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $credObject -Authentication Basic -AllowRedirection
      Import-PSSession $ExchOnlineSession
      [/code]

      I also created some connector script that you can find in my github. You could use these to easily connect to Exchange Online, Office 365, Skype for Business of Security and compliance. You can find them here: https://github.com/ruudmens/SysAdminScripts/tree/master/Connectors

      • The web address in the above code ends with “…” which leads me to believe there should be something else there (like maybe our company’s name or something). Can you verify that and let me know what should be in it’s place?

        • Also, when I tried to run the first line it replied “Files cannot be loaded because running scripts is disabled on this system.” Do we have to have a certain version of Exchange Online for this to work?

          • I wasn’t running as Administrator so that could explain some of my errors, but I ultimately ended up contacting Microsoft tech support and they walked me through it. Thanks for replying so quickly!

Leave a Comment

0 Shares
Tweet
Pin
Share
Share