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

I added some Connector scripts to my Technet Gallery, you can use the Exchange Online connector to easily connect to Exchange Online. 

To change the room mailbox details we need to connect to Exchange Online with PowerShell. You can use Exchange Online connector script I created or use the PowerShell commands below:

$credObject = Get-Credential

This will display a prompt to authenticate you and store your credentials.
Import the PowerShell commands:

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

Import-PSSession $ExchOnlineSession

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 Delete subject 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:

Meeting details room calendar

Bonus – Changing multiple Room Mailboxes at once

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

$rooms = Get-Mailbox -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

Get more stuff like this

IT, Office365, Smart Home, PowerShell and Blogging Tips

I hate spam to, so you can unsubscribe at any time.

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

  1. 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

  2. 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..

  3. 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.

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

  5. 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}

  6. 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?

  7. 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

  8. 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

  9. 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