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