Friday, 14 March 2025

Microsoft Place Settings

There are settings in the configuration of Microsoft Places that can be challenging to understand without first seeing what the end user experience looks like. I know that Microsoft are allergic to providing screenshots, so this post is here to help. There are many settings in the Microsoft Places PowerShell that may look like backend metadata but most of these settings will actually change the Places user experience. As a result, it’s important to understand what these settings change on the user interface side of the fence. In this post I’m going to go through the settings that are available and how they surface to users in the Places app.

Note: The Places Explorer/Finder is only available for users that have a Teams Premium Licence. This is most of the functionality that is covered in this post, so keep that in mind.


This post contains all the required PowerShell settings to be able to configure Microsoft Places. However, if you don’t want to waste your time with PowerShell you can always use my Microsoft Places Viewer tool to make these configuration settings:


Get it here: https://www.myteamslab.com/2025/02/microsoft-places-viewer.html


Floor Sort Order


When creating floors there is an attribute called SortOrder which will determine in what order Floors will show up in the Floor list in Places. If you don't set this value then the floors will end up in the order in which they were assigned in the system. Below is an example of how your floor list can end up if you don't set sort order correctly at the time of configuring your floors:


Based on this, I would recommend that you always set the sort order of the floor when you're creating it. This value cannot be changed later so it's important to set this when you're first creating the floors.


Room Finder Features


Room Finder is an experience that you get in the Explore tab in the Places app when you have a Teams Premium license. You get to the room explorer via the “Help me find a room” button:


Room Finder – Device/Capabilities


In the Room Finder you’ll see a list of rooms that are available to book. As part of the information provided about the room you can see what equipment is in the room. The generic equipment types supported are Display, Video and Microsoft Teams Room devices. This gives the user an idea of the level of video conference experience that the room can provide.

 


When the room has been configured as having Display, Video and/or MTR capabilities the user can use the “features” filter to filter the rooms to only the ones with the selected level of feature support. For example, if the user just wants a room with a Display, they can filter for that:


In order for these values to be populated in Microsoft Places UI, the administrator needs to do some configuration. Here’s the way these features are handled in the PowerShell configuration:

Display: If the DisplayDeviceName attribute has any value assigned, then the Display icon will be shown in the Room Finder. Note: In the case below I have configured “Sony 50 Inch” display in the setting. The user does not get to see this additional information though - they just get to see that there is a "Display" device.

Video: If the VideoDeviceName attribute has any value assigned, then the Video icon will be shown in the Room Finder. Note: in the case below I have configured a “Jabra Panacast” in the setting. The user does not get to see this additional information though - they will just get to see that there is a "Video" device.

MTR (Microsoft Teams Room): If the MTREnabled attribute set to $true in PowerShell then the room will have the “Teams Device” icon displayed in the Room Finder.


 Here's the PowerShell for doing this configuration:

Example:

Set-PlaceV3 -Identity "CoolRoom@contoso.com " –DisplayDeviceName "Sony 50 inch" –VideoDeviceName "Jabra Panacast" –MTREnabled $true

 


Room Finder - Amenities


If you want to display custom text to users (as well as filter by them) in Room Finder, you can use the Tags configuration in the Microsoft Place PowerShell. This gives you the ability to give additional information about the room that may be custom for your working environment. Below is an example of how the Tags get displayed in the Room Finder:


You configure tags like this:

Example:

Set-PlaceV3 -Identity "CoolRoom@contoso.com" -Tags "Poly X30", "Good Audio", "Great Mics"

 

Tags also become part of the filtering list of features that the user can use to help find the right room for the occasion. You will want to be studious about the number of Tags you use because you will not want a heap of random things showing up in the filter list: 


 

Room Finder - Capacity


Rooms can have a capacity value assigned to them. This gives the user the ability to filter for rooms that will be suitable for the size of meeting that they’re setting up.

The Capacity filter in the Room Finder in Microsoft Places looks like this:


When the user changes the capacity filter, only the rooms with a capacity larger than the value they have entered will be displayed. 

Capacity is configured in Microsoft Places PowerShell as follows:

Example:

Set-PlaceV3 -Identity CoolRoom@contoso.com -Capacity 10



Room Finder - Wheelchair Accessibility


Another specific tag that Microsoft has allowed in the Rooms Finder is to highlight if the room is Wheelchair accessible. This adds another item to the Amenities section in the rooms details. Here’s an example:


 To configure this use the following PowerShell:

Example:

Set-PlaceV3 -Identity "CoolRoom@contoso.com " –IsWheelChairAccessible $true 



Desk Pool Finder - Features


The Desk Finder in Microsoft Places works in the same way as it does in the Room Finder, however, there are fewer settings that will show up for desk pools than we previously saw with rooms. You get to the Desk Finder by clicking on the "Help me find a desk" button in the Places app:


 

Desk Finder – Capacity


In a similar way to rooms, desk pools can also have a "Capacity" value configured for them. In the case of Desk Pools, the capacity setting has a different function. For rooms, the capacity is used for showing the user how many people they could fit in the room for their meeting. For a desk pool, the capacity value describes how many people can book the space (or desk out of the available desks) for the day. In the desk finder you can see that the capacity displays how many available desks there are in that area out of the configured capacity:


 

Each time a user reserves a desk in the desk pool the capacity will reduce by one until it has reached the capacity and no more can be booked.

Note: If you don’t have a capacity set it will appear in the Desk Finder as being “Unavailable”, which looks like this: 


  

Desk Finder – Tags


For desk pools, you can also assign Tags in the same way as you can for rooms. A difference that I’ve noticed in testing is that the Tags are not displayed in the details of the space as they are on rooms. I imagine that this is something that will be fixed over time. The Features filter displays all the Tags that have been applied to the various desk pools and you’ll be able to filter based on these settings. Here’s an example of the feature filter with Tags being shown in it:


 

Here's how you can configure Tags for Desk Pools:

Example:

Set-PlaceV3 -Identity DeskPool01@contoso.com -Tags "Awesome Space", "chairs", "stuff"

 

 

Building Information


Buildings can have address information associated with them which is useful for helping users to find them in real life.

Here’s an example in the Places Explorer of what an address will show up like:


 

These settings are configured as follows: 

Example:

Set-PlaceV3 -Identity CoolRoom@contoso.com -CountryOrRegion "AU" -City "Melbourne" -State "VIC" -Street "1 Bourke Street"

 

 

Building Links


Each building can have web-based links associated with it so you can link out to things that may be relevant for that location. Some examples of this might be catering or park links for people to know how to access these things:


 

The Services and Amenities links are configured as follows:

Example:

Set-PlaceV3 -Identity CoolRoom@contoso.com -ResourceLinks @{name="Parking";value="https://contoso.com/parking";type="Url"}, @{name="Catering";value="https://contoso.com/catering";type="Url"}


Adding Links to Apps

If you want to link to another Microsoft Teams app you can do so by using the MetaOsApp type in the ResourceLinks setting. Here’s an example:


When adding an app you need to make sure first that the app that you want to add support Microsoft 365, Outlook and Teams. You do this by looking in the Teams Admin Centre under Teams Apps > Manage apps for the three icons in the Supported on column:

 


Once you know the app is supported you then need to find the apps App ID. You do so by looking in the Teams Admin Center Teams Apps > Manage apps > Open an App:



Then in the places PowerShell you can add the Teams App link along with the previous links added, like so:

Example:

Set-PlaceV3 -Identity CoolRoom@contoso.com -ResourceLinks @{name="Access Manager";value="6de4a040-e849-4a16-ab20-a0470312e6f9";type="MetaosApp"}



Room Images


It's a good idea to add images for each of your rooms and spaces so that users have a chance to see what the physical space looks like before they book it.

This can be done in Microsoft Entra (Entra > Identity > All Users > Select Room Account):


 

Click on the Camera icon where the account image is and upload the image:


 Add your image and Upload:


 

Now when the users view the room in the Room Finder they can see a nice image of what the room looks like to help them make the decision on whether to book that particular room.


 

The Wrap Up


Hopefully this deep dive on Microsoft Places settings has left you in a state of pure bliss. You now understand all there is to understand about the settings available for Microsoft Places…. until Microsoft undoubtably release more features at some random time in the future. But don’t think about that, just live in the moment. Enjoy yourself for this fleeting period. Cheers.




Read more →

Friday, 28 February 2025

Microsoft Places Viewer

I’ve been playing around a bit recently with Microsoft Places configuration. I’ve found viewing the Places configuration in PowerShell to be a bit cumbersome. The configuration has a degree of hierarchy built into it and when you list it up in PowerShell as objects, and you are required to match all the ParentIds yourself, it's quite painful. To try and help with this, I created a little PowerShell script that allows you to view your PlacesV3 config in a clearer tree format.


Microsoft Places Viewer

Microsoft Places Viewer is simple to use tool for viewing your Microsoft Places configuration. It allows you to connect and list the current Microsoft Places data and display it in a hierarchical tree format:



If there are rooms or spaces that don’t have parents associated with them, the tool will display them under the "Orphaned Items" tree node. This allows you to easily troubleshoot the rooms and spaces that are not configured correctly in your tenancy. When you click on any of the nodes on the tree the properties for that object will be displayed on the right hand side of the screen. This allows you to easily check your configuration for each object.

 

DOWNLOAD FROM GITHUB

 

Version 1.00 – Initial Release.

Version 2.00 – Editing Capabilities Added.

  • Create Buildings, Floors, Sections, and Desks via right-click in the object tree or the dropdown menu using the "Create New" button.
  • Delete Buildings, Floors, Sections, and Desks by right-clicking on an object in the tree.
  • Edit attributes of Buildings, Floors, Sections, and Desks using the "Edit Value" button for editable fields. If you want to know what the attributes do, check out this blog post: https://www.myteamslab.com/2025/03/microsoft-place-settings.html
  • View and manage Individual Desks (in addition to Workspace/Space objects).
  • Individual Desks are now displayed in grey, and Desk Pools (Workspaces) appear in blue for easier differentiation.


How to Run the Tool

The tool runs on top of PowerShell 7, which is also a prerequisite for the Microsoft Places PowerShell module. To install the Places PowerShell module, do the following:

Note: If you don't have PowerShell 7 installed you will need to do this first. Get it here: https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows


Step 1: If you don’t already have the Microsoft Places PowerShell Module installed, do the following:

Run PowerShell 7 as Administrator (Right Click on the App > Select "Run as administrator"):


 

Step 2: Run the following PowerShell command to install the Microsoft Places PowerShell module:

Install-Module -Name MicrosoftPlaces -Force

 

Step 3: Download a copy of the Microsoft Places Viewer tool from Github. Before running the script you may need to “Unblock” it in the Windows file properties. To do this, right click on the file and open the Properties window. In the General tab there is a Check Box marked as “Unblock”. You need to check this box:


 

Step 4: Run the script in the PowerShell 7 window:

Note: You can’t use the Right Click and Run with PowerShell option as this will likely execute it using PowerShell 5, which is not supported.

Change directory to the directory containing the script (change the path to the folder where the script is on your PC):

cd "C:\Users\Name\Documents\CoolScripts"


Run the script. You should see the Microsoft Places Viewer GUI appear:

.\MicrsosoftPlacesViewer-1.00.ps1

 

Step 5: Click the Connect button:

A browser window will now pop up asking for credentials. Enter the credentials for your M365 tenancy in the browser window and sign in:


Step 6: Click the Get Data button:



Individual Desks vs Desk Pools (Workspace/Space)


Exchange PowerShell and Places PowerShell both include a "Desk" object, which represents an individual desk designed for one person. This differs from workspaces or spaces, which are configured to represent multiple desks based on a specified capacity.

Note: Microsoft use a confusing variety of words to describe these things which take some getting used to. Workspaces which contain multiple desks can  be described as workspaces, spaces, or desk pools.

 

Individual Desk Creation

Individual Desks are created in Exchange as a resource account with the Type “Desk”. Here is an example of the configuration:


Add a Desk:

New-Mailbox -Room -Alias Desk5 -Name "Desk5" | Set-Mailbox -Type Desk

To integrate an Exchange Desk account with Places, create a Desk object within the Places configuration. You can use the Microsoft Places Viewer tool to accomplish this with the following steps:

Select Desk as the type of object to create and click the Create New button.


After clicking "Create New," a dialog box will appear for you to complete. To link the Places configuration to the Exchange configuration, enter the Desk resource account's email address in the "Mailbox Email Address" field.


After completing these steps, the Individual Desk will appear in the Exchange version of the Places Finder. While it is expected to show up in the Teams App Places Finder in the future, this feature is not yet available.

 

Currently, in the Outlook Places Finder, an Individual Desk looks like this:

1. Open your calendar and select the location icon.

2. The Places Card will be displayed.

3. Click the “Book Now” link button to proceed.


The Outlook Desk booking interface will appear (note that this is different from the Places Desk Finder):


You may need to select "Browse more on Places Finder," which will display additional available Desk locations, including both Individual Desks and Desk Pools (Workspaces).

 

Desk Pools (Workspace/Space) Creation

For Desk Pools (also known as Workspaces or Spaces), the object created in Exchange is of the "Workspace" type. The "Enforce Capacity" flag must be set to true on the account. Below is an example of the configuration:

New-Mailbox -Room -Alias Deskpool06 -Name "Desk Pool 6" | Set-Mailbox -Type Workspace

Set-CalendarProcessing -Identity Deskpool06 -EnforceCapacity $True

 

After some time (usually a few hours), the workspace object from Exchange will appear in the Places configuration. In the Microsoft Places Viewer tool, it will be listed as a Desk Pool (Space) object under the Orphaned Items tree section. To enable users to utilize the Desk Pool in Places, a ParentId must be assigned to it in Microsoft Places.


At this point, you can use the Microsoft Places Viewer tool to configure the Capacity and ParentId for the Desk Pool. Follow these steps to set the Capacity on the Desk Pool:



Enter the number of people that the space will support:


 Edit the ParentId on the Desk Pool:


 Add the ParentId of the section object that you want the Desk Pool to be associated with:


Now that the Desk Pool will have the ParentId and will move underneath the Section that you selected:


After this is done, the Desk Pool will start showing up in the Microsoft Places Desk Finder.

 

The Wrap Up

I hope you’ve enjoyed your stay at this place, reading about places and how to better place yourself for success within the Places ecosystem. May the place be with you in every place you go. 🖖




Read more →

Monday, 17 February 2025

Microsoft Teams Phone Number Management for Direct Routing

I can barely believe that this day has come… A day I have been waiting for since Microsoft Teams first got the ability to make calls. That’s right, phone number management for Direct Routing is finally here!

Whilst you’ve been able to assign random phone numbers directly to users in Teams via PowerShell for ever, and more recently in Teams Admin Centre, this has never actually included the ability to manage number ranges and keep track of what numbers are free or in use from your carrier number ranges. I’ve worked with a lot of enterprise customers that have many thousands of numbers, and the idea of keeping a separate database of the number range allocation for users and voice apps has been a real pain.

Let’s have a look at how this is now configured in the Teams Admin Centre (TAC).


Step 1: The first thing to do is make your way to the Phone Numbers area in TAC under Voice > Phone Numbers. In here you click on the Add button:



Step 2: Now you will need to assign a Name and Description for the number range that you’re importing. I find the language on this page to being a little disconcerting, as it makes it look like you’re “ordering” a number range, which you are not actually doing for Direct Routing. 


There are three options to choose from in importing your number ranges::


OPTION 1 - Upload CSV:

To upload the numbers you need a CSV file containing a list of E.164-formatted telephone numbers. There is an example CSV file that you can download that shows the correct heading to use in the CSV file. The single column header is “TelephoneNumber”. You just have to list all the number ranges for your business (E.164 format) and put them into the CSV file under the header. Excel is the easiest way to do this. Here’s an example of the data for an import:


TIP: Excel by default will interpret the cells in a CSV file as being “General” format. This leads to E.164-formatted numbers being interpreted as being positive numbers (e.g. numbers that start with a “+” sign). As a result your E.164 formatted numbers get the "+" sign truncated when opening an existing CSV file or when you type or paste them into a "General" format cell. The best thing to do in your CSV file is to convert the cells that are going to contain phone numbers as a Custom format, like this:


Create a Custom type of “+0”. This will make all the numbers in to fields have + in front of them but it will also treat them like a number so you can do fill down and other number functions with them.

Once you’ve filled in your description and selected to upload your file, the screen should look something like this:


OPTION 2 - Add Phone Number Range:

For the number range you simply enter the start and the end of the range (the range needs to be a contiguous block of numbers):


OPTION 3 - Add one to many phone numbers:

In this option you get to add numbers in a comma separated list:


After adding the numbers using your selected method, click the Next button.

At this point you’ll get another message that’s a bit weird. It will tell you that your “order has been placed!”. Don’t get concerned by this. What it actually means is that it’s now going to upload the numbers from the CSV to the Phone Numbers page. 


When you exit this screen you will be taken back to the Orders tab on the Phone Number page and it should tell you that your numbers have been successfully uploaded: 


If you head back to the Numbers tab you should see your numbers there, with no User assigned to them yet:


Step 3: The next step is to actually assign your phone numbers to a user. To do this, go to the Users > Manager Users and select the user you would like to assign a number to:

 


In this case my user does not have “Enterprise Voice” turned on. You need to turn on the "Enterprise Voice" toggle and then click the “Assign primary phone number” button. A fly over will now pop out on the right hand side of the screen and you will now see is that if you click on the Assigned Phone Number text box, you will get a drop down list showing all the free numbers from the Phone Numbers section:


Note: This list will show about the first 100 free entries in the Phone Number list. If you want to assign a number that is outside of this range, you can go to the Phone Numbers list and Edit the number and assign it to a User from there.

You can also setup the Emergency location assignment for the user as required. Another useful item in this assignment process is that there’s a toggle for automatically emailing the user about their new phone number, which is a nice touch:


The email that is sent to the user if you leave the Email toggle on looks like this:

 

Now when you look at the user detail in Teams, you’ll see that the user now has the phone number assigned to them:


This will also carry through to the Voice > Phone Numbers section where you will see the user listed against the phone number:


Some more good news about this configuration is that it doesn't stop you from later using PowerShell to assign numbers in bulk to users. When you assign a number that's already in the Phone Numbers list using PowerShell, the configuration also gets updates in the Phone Numbers list in the same way as shown above.

This is awesome!


The Wrap Up

It’s pretty mind boggling that it’s taken this long for this functionality to make it into the platform. I for one am very excited about it. It’s a massive quality of life uplift for those that have to manage a Direct Routing based Teams setup. I hope you all enjoy the new feature as much as I do!





Read more →

Popular Posts