If you're like me, you try to find the most efficient way to do things. That's why after reading Microsoft's documentation on setting up emergency calling in Teams, I thought, WOW, there has to be a better way. If you don't know what I'm referring to, I'll tell you...
ENTERING EACH SUBNET AND BSSID MANUALLY!
Yeah, that isn't going to work for me. So I put my love of PowerShell to work. The basic command is simple and I was able to change it to continue using it.
We have Skype for Business on-premises, with E911 already set up. I have all of my subnets and WAPs configured with their appropriate address, so no which of our 11 locations you go to, Skype knows your location and if you were to dial 911, it will send you to the correct PSAP and county dispatch. That is what the expectation is for Teams. I have been reading out Teams not updating your location fast enough, sometimes takes a log off and back on, a restart of your computer...those things are not going to work for us. So hoping MS releases an update on that soon.
You'll need to do some pre-work. On one of our FE servers, I ran the following commands to get the information I need.
Get-CsLisWirelessAccessPoint | Export-Csv c:\temp\AllAPs.csv
Get-CsLisSubnet | Export-Csv c:\temp\subnets.csv
If you don't have this set up or enterprise voice is brand new for you, you will need work with your network people to get this information.
Setting up dynamic emergency calling in Teams:
Find out what network regions you have set up by running Get-CsTenantNetworkRegion. If you're like us, we have 11 locations, you will need a network region for all of your supported locations.
If you need to add a region, use the command New-CsTenantNetworkRegion.
Setting up your network regions first is important, because you will want to assign each network site to a network region. Use this command to set your network sites New-CsTenantNetworkSite -NetworkSiteID "HQ" -NetworkRegionID "Headquarters"
The next step you'll want to do is set up the tenant network subnets. This is where the MANUAL part is a no go. First you'll wan to create a .csv file with each subnet, mask and site id. The spreadsheet will look something like this format:
Identity, Mask, SiteID
172.11.12.0, 24, Redmond
172.11.13.0, 24, Chicago
172.11.14.0, 25, Vancouver
172.11.15.0, 28, Paris
The command will be:
Import-CSV C:\subnets.csv | foreach {New-CsTenantNetworkSubnet –SubnetID $_.Identity -MaskBits $_.Mask -NetworkSiteID $_.SiteID}
The site id is the name you used for your network sites in the above step.
5. Next you'll need to know each sites location ID. To get those, run the command:
Get-CsOnlineLisLocation | Export-Csv c:\temp\locationid.csv
I prefer to export it, since it can be a long list and you'll be able to the information easier.
6. Now you can set your lis subnets. This is where you can change the above command to what is needed for the set-csonlinelissubnet and change your .csv to the appropriate information.
Import-CSV C:\lissubnet.csv | foreach {Set-CsOnlineLisSubnet –Subnet $_.Identity -LocationID $_.LocationID -Description $_.Description}
7. Then your wireless access points. Just a reminder, change the above command to accommodate the new command:
Import-CSV C:\waps.csv | foreach {Set-CsOnlineLisWirelessAccessPoint –BSSID $_.BSSID -LocationID $_.LocationID -Description $_.Description}
We have over 2,500 BSSIDs to set. So this step took about 15 minutes.
8. Now you will want to set your trusted IP addresses. This information you can get from the steps above. But use this command:
Import-CSV C:\trustedIPs.csv | foreach {New-CsTenantTrustedIPAddress –IPAddress $_.Identity -MaskBits $_.Mask -Description $_.Description}
After performing the above steps
9. Set your Emergency addresses. I did this manually, since a few of our locations were not able to be found automatically and I needed to look up their longitude and latitude. We are also going to be routing based on ELIN set up. I already have a number associated to each location, so make sure to put that in there when you create it, because you are not able to go in and change the location, what it has been verified.
10. Create a .csv for your reporting labels. This is not necessary for emergency calling, however this will be helpful in reporting and if you report an issue to Microsoft. Warning: Microsoft engineers will have access to the information you put on there. My files used the below headings.
After performing all the above steps. You should have the following complete for your Teams tenant and emergency calling:
Reporting labels uploaded
Emergency addresses of all your supported locations and they are verified
Network topology has all your Network sites and subnets assigned to each
Network topology has your Trusted IPs configured
Networks & locations has your Subnets configured
Networks & locations has your Wi-Fi access points configured
Since we are using Direct Routing with hosted SBCs, the next steps are to verify ELIN configuration on those and lots and lots of testing.
trying to bulk in the locations(places)...
$parameters = @{ScriptBlock = {Get-Content -Path C:\Users\ghough\Downloads\STBTestLocationImport.txt}}
one ran 104C and shows up on the portal, the longer list fails, prob no "enter" or eof?
PS C:\Users\ghough> Invoke-Command @parameters
New-CsOnlineLisLocation -CivicAddressId c4aafc60-247f-11ed-a486-c5b99acbe0f3 -Location "104C"
PS C:\Users\ghough> Invoke-Command @parameters
New-CsOnlineLisLocation -CivicAddressId c4aafc60-247f-11ed-a486-c5b99acbe0f3 -Location "105"
New-CsOnlineLisLocation -CivicAddressId c4aafc60-247f-11ed-a486-c5b99acbe0f3 -Location "105A"
New-CsOnlineLisLocation -CivicAddressId c4aafc60-247f-11ed-a486-c5b99acbe0f3 -Location "108A"
New-CsOnlineLisLocation -CivicAddressId c4aafc60-247f-11ed-a486-c5b99acbe0f3 -Location "109"