@@ -5,32 +5,57 @@ function Remove-CIPPLicense {
55 $userid ,
66 $username ,
77 $APIName = ' Remove License' ,
8- $TenantFilter
8+ $TenantFilter ,
9+ [switch ]$Schedule
910 )
1011
11- try {
12- $ConvertTable = Import-Csv ConversionTable.csv
13- $User = New-GraphGetRequest - uri " https://graph.microsoft.com/beta/users/$ ( $userid ) " - tenantid $tenantFilter
14- if (! $username ) { $username = $User.userPrincipalName }
15- $CurrentLicenses = $User.assignedlicenses.skuid
16- $ConvertedLicense = $ (($ConvertTable | Where-Object { $_.guid -in $CurrentLicenses }).' Product_Display_Name' | Sort-Object - Unique) -join ' , '
17- if ($CurrentLicenses ) {
18- $LicensePayload = [PSCustomObject ]@ {
19- addLicenses = @ ()
20- removeLicenses = @ ($CurrentLicenses )
12+ if ($Schedule.IsPresent ) {
13+ $ScheduledTask = @ {
14+ TenantFilter = $TenantFilter
15+ Name = " Remove License: $Username "
16+ Command = @ {
17+ value = ' Remove-CIPPLicense'
2118 }
22- if ($PSCmdlet.ShouldProcess ($userid , " Remove licenses: $ConvertedLicense " )) {
23- $null = New-GraphPostRequest - uri " https://graph.microsoft.com/beta/users/$ ( $userid ) /assignlicense" - tenantid $tenantFilter - type POST - body (ConvertTo-Json - InputObject $LicensePayload - Compress - Depth 5 ) - verbose
24- Write-LogMessage - user $ExecutingUser - API $APIName - message " Removed licenses for $ ( $username ) : $ConvertedLicense " - Sev ' Info' - tenant $TenantFilter
19+ Parameters = [pscustomobject ]@ {
20+ userid = $userid
21+ username = $username
22+ APIName = ' Scheduled License Removal'
23+ ExecutingUser = $ExecutingUser
2524 }
26- return " Removed licenses for $ ( $Username ) : $ConvertedLicense "
27- } else {
28- Write-LogMessage - user $ExecutingUser - API $APIName - message " No licenses to remove for $username " - Sev ' Info' - tenant $TenantFilter
29- return " No licenses to remove for $username "
25+ ScheduledTime = [int64 ](([datetime ]::UtcNow).AddMinutes(5 ) - (Get-Date ' 1/1/1970' )).TotalSeconds
26+ PostExecution = @ {
27+ Webhook = $false
28+ Email = $false
29+ PSA = $false
30+ }
31+ }
32+ Add-CIPPScheduledTask - Task $ScheduledTask - hidden $false
33+ return " Scheduled license removal for $username "
34+ } else {
35+ try {
36+ $ConvertTable = Import-Csv ConversionTable.csv
37+ $User = New-GraphGetRequest - uri " https://graph.microsoft.com/beta/users/$ ( $userid ) " - tenantid $tenantFilter
38+ if (! $username ) { $username = $User.userPrincipalName }
39+ $CurrentLicenses = $User.assignedlicenses.skuid
40+ $ConvertedLicense = $ (($ConvertTable | Where-Object { $_.guid -in $CurrentLicenses }).' Product_Display_Name' | Sort-Object - Unique) -join ' , '
41+ if ($CurrentLicenses ) {
42+ $LicensePayload = [PSCustomObject ]@ {
43+ addLicenses = @ ()
44+ removeLicenses = @ ($CurrentLicenses )
45+ }
46+ if ($PSCmdlet.ShouldProcess ($userid , " Remove licenses: $ConvertedLicense " )) {
47+ $null = New-GraphPostRequest - uri " https://graph.microsoft.com/beta/users/$ ( $userid ) /assignlicense" - tenantid $tenantFilter - type POST - body (ConvertTo-Json - InputObject $LicensePayload - Compress - Depth 5 ) - verbose
48+ Write-LogMessage - user $ExecutingUser - API $APIName - message " Removed licenses for $ ( $username ) : $ConvertedLicense " - Sev ' Info' - tenant $TenantFilter
49+ }
50+ return " Removed licenses for $ ( $Username ) : $ConvertedLicense "
51+ } else {
52+ Write-LogMessage - user $ExecutingUser - API $APIName - message " No licenses to remove for $username " - Sev ' Info' - tenant $TenantFilter
53+ return " No licenses to remove for $username "
54+ }
55+ } catch {
56+ $ErrorMessage = Get-CippException - Exception $_
57+ Write-LogMessage - user $ExecutingUser - API $APIName - message " Could not remove license for $username . Error: $ ( $ErrorMessage.NormalizedError ) " - Sev ' Error' - tenant $TenantFilter - LogData $ErrorMessage
58+ return " Could not remove license for $ ( $username ) . Error: $ ( $ErrorMessage.NormalizedError ) "
3059 }
31- } catch {
32- $ErrorMessage = Get-CippException - Exception $_
33- Write-LogMessage - user $ExecutingUser - API $APIName - message " Could not remove license for $username . Error: $ ( $ErrorMessage.NormalizedError ) " - Sev ' Error' - tenant $TenantFilter - LogData $ErrorMessage
34- return " Could not remove license for $ ( $username ) . Error: $ ( $ErrorMessage.NormalizedError ) "
3560 }
3661}
0 commit comments