In modern enterprise telecommunications environments utilizing Microsoft Teams Phone with Direct Routing, ensuring compliant and reliable emergency calling (such as 911 in North America, 999 in the UK, or 112 in Europe) is an urgent legal and operational mandate. Telecommunications regulations (such as Kari’s Law and RAY BAUM’S Act in the United States) require enterprise telephony systems to support direct emergency dialling without access prefixes, route emergency calls to local Public Safety Answering Points (PSAPs), and transmit accurate caller dispatch information.
While CsTeamsEmergencyCallingPolicy manages security desk notifications and location lookups, the actual call routing path—including emergency dial strings, session border controller (SBC) routing, and PSTN usages—is governed by the CsTeamsEmergencyCallRoutingPolicy. Using PowerShell, administrators can define emergency numbers, map emergency dial masks, and enforce failover routing across enterprise Session Border Controllers.
Understanding CsTeamsEmergencyCallRoutingPolicy Architecture
The CsTeamsEmergencyCallRoutingPolicy cmdlets manage how emergency calls placed by Teams users are handed off to Direct Routing SBCs:
- Emergency Numbers: Individual emergency records instantiated via
New-CsTeamsEmergencyNumberthat define the dialled digits (e.g.911), emergency dial masks (e.g.9911), and assigned PSTN usages. - PSTN Usages: Directs the emergency call to specialized voice routes associated with enterprise Direct Routing SBCs configured to communicate with emergency service carriers.
- Site and Subnet Targeting: Allows applying site-specific emergency routing policies to physical office branches, ensuring calls route out of local SBC trunks matching the user’s geographic location.
Connecting to Microsoft Teams PowerShell
Open an elevated PowerShell session on your administrative workstation and connect to your Microsoft 365 tenant:
Connect-MicrosoftTeams
Verify that your session is active with appropriate Teams Administrator or Global Administrator privileges:
Get-CsTenant | Select-Object DisplayName, TenantId
Inspecting Existing Emergency Call Routing Policies
To view all emergency call routing policies defined in your tenant, execute:
Get-CsTeamsEmergencyCallRoutingPolicy
To view the default Global policy inherited by all users who do not have an explicit custom assignment:
Get-CsTeamsEmergencyCallRoutingPolicy -Identity Global | Format-List Identity, Description, EmergencyNumbers
In default tenant setups, the EmergencyNumbers property is typically empty until explicitly configured by administrators.
Creating Emergency Numbers for Direct Routing
Before creating or updating an emergency call routing policy, create one or more emergency number objects using New-CsTeamsEmergencyNumber. For example, to configure emergency number 911 with a dial mask allowing users to dial 9911 (accounting for legacy PBX habits):
$emergencyNumber911 = New-CsTeamsEmergencyNumber -EmergencyDialString "911" -EmergencyDialMask "9911" -OnlinePSTNUsage "Emergency-PSTN-Usage"
For organizations operating in the United Kingdom or Europe, configure corresponding numbers (such as 999 or 112):
$emergencyNumber999 = New-CsTeamsEmergencyNumber -EmergencyDialString "999" -EmergencyDialMask "9999" -OnlinePSTNUsage "UK-Emergency-Usage"
Creating a Custom Branch Emergency Call Routing Policy
Create a dedicated emergency call routing policy targeting a specific physical facility (for example, the London branch office):
New-CsTeamsEmergencyCallRoutingPolicy -Identity "London-Branch-EmergencyRouting" -Description "Direct Routing emergency call routing for London Office SBCs" -EmergencyNumbers @($emergencyNumber999) -AllowEnhancedEmergencyServices $true
To create a multi-number policy supporting both standard emergency numbers and test dial strings (such as 933 for automated 911 address verification):
$testEmergencyNumber = New-CsTeamsEmergencyNumber -EmergencyDialString "933" -OnlinePSTNUsage "Emergency-PSTN-Usage"
New-CsTeamsEmergencyCallRoutingPolicy -Identity "US-Headquarters-EmergencyRouting" -Description "Routes 911 and 933 test calls via US SBCs" -EmergencyNumbers @($emergencyNumber911, $testEmergencyNumber) -AllowEnhancedEmergencyServices $true
Modifying Existing Emergency Routing Policies
To update an existing policy—such as adding a newly instantiated emergency number or modifying PSTN usages—use Set-CsTeamsEmergencyCallRoutingPolicy:
Set-CsTeamsEmergencyCallRoutingPolicy -Identity "US-Headquarters-EmergencyRouting" -EmergencyNumbers @($emergencyNumber911, $testEmergencyNumber)
To clear emergency numbers from a policy during decommissioning:
Set-CsTeamsEmergencyCallRoutingPolicy -Identity "Old-Policy" -EmergencyNumbers @()
Assigning Emergency Call Routing Policies
Assign your custom emergency call routing policy to a specific user with Grant-CsTeamsEmergencyCallRoutingPolicy:
Grant-CsTeamsEmergencyCallRoutingPolicy -Identity "[email protected]" -PolicyName "US-Headquarters-EmergencyRouting"
To assign the policy across an entire departmental security group in Microsoft Entra ID:
Grant-CsTeamsEmergencyCallRoutingPolicy -Group "London-Staff-GroupID" -PolicyName "London-Branch-EmergencyRouting" -Rank 1
To unassign an explicit policy so the user reverts to inheriting the tenant Global baseline:
Grant-CsTeamsEmergencyCallRoutingPolicy -Identity "[email protected]" -PolicyName $null
Verifying User Policy Assignment
Confirm the effective policy applied to a user account:
Get-CsUserPolicyAssignment -Identity "[email protected]" -PolicyType TeamsEmergencyCallRoutingPolicy
By effectively configuring CsTeamsEmergencyCallRoutingPolicy in PowerShell, organizations guarantee reliable, legally compliant emergency voice routing across enterprise Microsoft Teams Direct Routing infrastructure.