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:
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-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
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?
No that’s not possible.
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?
Try changing the view. Click on the tab “view” and select “workweek”
Hi sorry, I was not as clear as I thought I was being.
I was meaning the info once it is in the calendar and you are viewing the booking.
https://drive.google.com/drive/folders/1_hSXaq-4vN0e4Ypu_2lg3p9NJu-99Oej?usp=sharing
Best way I could think of to show you what I mean.
Thank you
But what happens when you make the appointment 1 hour instead of half an hour?
Okay, apparently I am an idiot.
Yes it was the “length of the meeting”
Thank you for the help.
Do you have any other write ups about Calendars or Rooms ?
No not at the moment. What kind of information are you looking for?
Well
I know
Get-MailboxCalendarConfiguration -identity ROOMNAME
Get-MailboxRegionalConfiguration -identity ROOMNAME
and how to set those settings.
but i don’t know how to ” Get-MailboxRegionalConfiguration -ALLROOMS
and see it in a table. so that i can easily compare all the rooms, i have been looking today but have not found anything yet.
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
Hi Ruud!
Is it not easier to just use this command:
Set-MailboxFolderPermission homeetingroom1:\Calendar -User Default -AccessRights Reviewer
?
Thanks,
I am not sure if you can also see the location details and availability data with the reviewer permission.
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
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.
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.
great stuff, works
Hello
Is there a way to get the reservation history of the room?
Do you mean like the changes made in an appointment or an export of all the amounts from the last x months?
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)?
In my case the IX5000 shows Booking/Meeting ID under meeting description.
Is there there is any powershell to avoid this?
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)?
What you can do is use a foreach:
foreach ($room in (get-content c:\dir\roomlist.txt)){set-calendarprocessing -identity $room}
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?
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..
Thank you!! Saved me a lot of time. The bonus is great too!
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.
Thanks for the article! This shows the subject and organiser. Is there a way to show the notes of the appointment aswell?
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}
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.
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?
What is the command that you are using? The error indicates that a result isn’t pipable into another expression.
I just did them one by one and completed the task that way. Thanks for your help!
Small bug in the disconnect, the comman should be:
Remove-PSSession $ExchOnlineSession
Thanks, fixed it in the article.
Hi,
Thanks for this topic.
It’s works good for me for new meetings.
How i can do it for existing meetings.
Thanks
You should see the details from the existing meetings as well. No need to change anything for that.
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
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
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".
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.
[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?
Try running powershell as Administrator and executing “set-ExecutionPolicy Unrestricted”
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!
Hmm it seems that disqus if breaking up the link and I can’t find a way to fix it. But when you click on it, it will try to open the link and show you the full path. It will end with powershell-liveid/
Or just crap the connector script here at Microsoft TechNet https://gallery.technet.microsoft.com/Connector-for-Exchange-84df39b1?redir=0