Skip to content

Commit 6a9a786

Browse files
committed
New API for removing all Teams Phone DIDs from specified user
1 parent cda6c4b commit 6a9a786

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-CIPPOffboardingJob.ps1

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,13 @@ function Invoke-CIPPOffboardingJob {
111111
$_.Exception.Message
112112
}
113113
}
114+
{ $_.RemoveTeamsPhoneDID } {
115+
try {
116+
Remove-CIPPUserTeamsPhoneDIDs -userid $userid -username $username -tenantFilter $TenantFilter -Headers $Headers -APIName $APIName
117+
} catch {
118+
$_.Exception.Message
119+
}
120+
}
114121
{ $_.RemoveLicenses -eq $true } {
115122
Remove-CIPPLicense -userid $userid -username $Username -tenantFilter $TenantFilter -Headers $Headers -APIName $APIName -Schedule
116123
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
using namespace System.Net
2+
using namespace System.Collections.Generic
3+
4+
function Remove-CIPPUserTeamsPhoneDIDs {
5+
[CmdletBinding()]
6+
param (
7+
$Headers,
8+
[parameter(Mandatory = $true)]
9+
[string]$UserID,
10+
[string]$Username,
11+
$APIName = 'Remove User Teams Phone DIDs',
12+
[parameter(Mandatory = $true)]
13+
$TenantFilter
14+
)
15+
16+
try {
17+
18+
# Set Username to UserID if not provided
19+
if ([string]::IsNullOrEmpty($Username)) {
20+
$Username = $UserID
21+
}
22+
23+
# Initialize collections for results
24+
$Results = [List[string]]::new()
25+
$SuccessCount = 0
26+
$ErrorCount = 0
27+
28+
# Get all tenant DIDs
29+
$TeamsPhoneDIDs = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/admin/teams/telephoneNumberManagement/numberAssignments" -tenant $TenantFilter
30+
31+
if (-not $TeamsPhoneDIDs -or $TeamsPhoneDIDs.Count -eq 0) {
32+
$Result = "No Teams Phone DIDs found in tenant"
33+
$Results.Add($Result)
34+
return $Results.ToArray()
35+
}
36+
37+
# Filter DIDs assigned to the specific user
38+
$UserDIDs = $TeamsPhoneDIDs | Where-Object { $_.assignmentTargetId -eq $UserID -and $_.assignmentStatus -ne 'unassigned' }
39+
40+
if (-not $UserDIDs -or $UserDIDs.Count -eq 0) {
41+
$Result = "No Teams Phone DIDs found assigned to user: '$Username' - '$UserID'"
42+
Write-LogMessage -headers $Headers -API $APIName -message $Result -Sev 'Info' -tenant $TenantFilter
43+
$Results.Add($Result)
44+
return $Results.ToArray()
45+
}
46+
47+
Write-LogMessage -headers $Headers -API $APIName -message "Found $($UserDIDs.Count) DIDs assigned to user: '$Username'" -Sev 'Info' -tenant $TenantFilter
48+
49+
# Process each DID assigned to the user
50+
foreach ($DID in $UserDIDs) {
51+
try {
52+
$PhoneNumber = $DID.telephoneNumber
53+
$NumberType = $DID.numberType
54+
55+
# Prepare the request body for unassigning the number
56+
$RequestBody = @{
57+
telephoneNumber = $PhoneNumber
58+
numberType = $NumberType
59+
} | ConvertTo-Json -Depth 3
60+
61+
# Make the API call to unassign the number
62+
$null = New-GraphPostRequest -uri "https://graph.microsoft.com/beta/admin/teams/telephoneNumberManagement/numberAssignments/unassignNumber" -type POST -body $RequestBody -contentType 'application/json' -tenant $TenantFilter
63+
64+
$SuccessResult = "Successfully removed Teams Phone DID: '$PhoneNumber' from: '$Username' - '$UserID'"
65+
Write-LogMessage -headers $Headers -API $APIName -message $SuccessResult -Sev 'Info' -tenant $TenantFilter
66+
$Results.Add($SuccessResult)
67+
$SuccessCount++
68+
69+
} catch {
70+
$ErrorMessage = Get-CippException -Exception $_
71+
$ErrorResult = "Failed to remove Teams Phone DID: '$($DID.telephoneNumber)' from: '$Username' - '$UserID'. Error: $($ErrorMessage.NormalizedError)"
72+
Write-LogMessage -headers $Headers -API $APIName -message $ErrorResult -Sev 'Error' -tenant $TenantFilter -LogData $ErrorMessage
73+
$Results.Add($ErrorResult)
74+
$ErrorCount++
75+
}
76+
}
77+
78+
# Add summary result
79+
$SummaryResult = "Completed processing $($UserDIDs.Count) DIDs for user '$Username': $SuccessCount successful, $ErrorCount failed"
80+
Write-LogMessage -headers $Headers -API $APIName -message $SummaryResult -Sev 'Info' -tenant $TenantFilter
81+
$Results.Add($SummaryResult)
82+
83+
return $Results.ToArray()
84+
85+
} catch {
86+
$ErrorMessage = Get-CippException -Exception $_
87+
$Result = "Failed to process Teams Phone DIDs removal for: '$Username' - '$UserID'. Error: $($ErrorMessage.NormalizedError)"
88+
Write-LogMessage -headers $Headers -API $APIName -message $Result -Sev 'Error' -tenant $TenantFilter -LogData $ErrorMessage
89+
throw $Result
90+
}
91+
}

0 commit comments

Comments
 (0)