@@ -5,32 +5,57 @@ function Remove-CIPPLicense {
5
5
$userid ,
6
6
$username ,
7
7
$APIName = ' Remove License' ,
8
- $TenantFilter
8
+ $TenantFilter ,
9
+ [switch ]$Schedule
9
10
)
10
11
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'
21
18
}
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
25
24
}
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 ) "
30
59
}
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 ) "
35
60
}
36
61
}
0 commit comments