|
| 1 | +function Invoke-CIPPStandardTeamsMeetingRecordingExpiration { |
| 2 | + <# |
| 3 | + .FUNCTIONALITY |
| 4 | + Internal |
| 5 | + .COMPONENT |
| 6 | + (APIName) TeamsMeetingRecordingExpiration |
| 7 | + .SYNOPSIS |
| 8 | + (Label) Set Teams Meeting Recording Expiration |
| 9 | + .DESCRIPTION |
| 10 | + (Helptext) Sets the default number of days after which Teams meeting recordings automatically expire. Valid values are -1 (Never Expire) or between 1 and 99999. The default value is 120 days. |
| 11 | + (DocsDescription) Allows administrators to configure a default expiration period (in days) for Teams meeting recordings. Recordings older than this period will be automatically moved to the recycle bin. This setting helps manage storage consumption and enforce data retention policies. |
| 12 | + .NOTES |
| 13 | + CAT |
| 14 | + Teams Standards |
| 15 | + TAG |
| 16 | + ADDEDCOMPONENT |
| 17 | + {"type":"number","name":"standards.TeamsMeetingRecordingExpiration.ExpirationDays","label":"Recording Expiration Days (e.g., 365)","required":true} |
| 18 | + IMPACT |
| 19 | + Medium Impact |
| 20 | + ADDEDDATE |
| 21 | + 2025-04-17 |
| 22 | + POWERSHELLEQUIVALENT |
| 23 | + Set-CsTeamsMeetingPolicy -Identity Global -MeetingRecordingExpirationDays \<days\> |
| 24 | + RECOMMENDEDBY |
| 25 | + UPDATECOMMENTBLOCK |
| 26 | + Run the Tools\Update-StandardsComments.ps1 script to update this comment block |
| 27 | + .LINK |
| 28 | + https://docs.cipp.app/user-documentation/tenant/standards/list-standards/teams-standards#medium-impact |
| 29 | + #> |
| 30 | + ##$Rerun -Type Standard -Tenant $Tenant -Settings $Settings 'TeamsMeetingRecordingExpiration' |
| 31 | + |
| 32 | + param($Tenant, $Settings) |
| 33 | + |
| 34 | + # Input validation |
| 35 | + $ExpirationDays = try { [int64]$Settings.ExpirationDays } catch { Write-Warning "Invalid ExpirationDays value provided: $($Settings.ExpirationDays)"; return } |
| 36 | + if (($ExpirationDays -ne -1) -and ($ExpirationDays -lt 1 -or $ExpirationDays -gt 99999)) { |
| 37 | + Write-LogMessage -API 'Standards' -tenant $Tenant -message "Invalid ExpirationDays value: $ExpirationDays. Must be -1 (Never Expire) or between 1 and 99999." -sev Error |
| 38 | + return |
| 39 | + } |
| 40 | + |
| 41 | + $CurrentExpirationDays = (New-TeamsRequest -TenantFilter $Tenant -Cmdlet 'Get-CsTeamsMeetingPolicy' -CmdParams @{Identity = 'Global' }).NewMeetingRecordingExpirationDays |
| 42 | + $StateIsCorrect = if ($CurrentExpirationDays -eq $ExpirationDays) { $true } else { $false } |
| 43 | + |
| 44 | + if ($Settings.remediate -eq $true) { |
| 45 | + Write-Host 'Time to remediate' |
| 46 | + if ($StateIsCorrect -eq $true) { |
| 47 | + Write-LogMessage -API 'Standards' -tenant $Tenant -message "Teams Meeting Recording Expiration Policy already set to $ExpirationDays days." -sev Info |
| 48 | + } else { |
| 49 | + $cmdParams = @{ |
| 50 | + Identity = 'Global' |
| 51 | + NewMeetingRecordingExpirationDays = $ExpirationDays |
| 52 | + } |
| 53 | + |
| 54 | + try { |
| 55 | + New-TeamsRequest -TenantFilter $Tenant -Cmdlet 'Set-CsTeamsMeetingPolicy' -CmdParams $cmdParams |
| 56 | + Write-LogMessage -API 'Standards' -tenant $Tenant -message "Successfully updated Teams Meeting Recording Expiration Policy to $ExpirationDays days." -sev Info |
| 57 | + } catch { |
| 58 | + $ErrorMessage = Get-CippException -Exception $_ |
| 59 | + Write-LogMessage -API 'Standards' -tenant $Tenant -message "Failed to set Teams Meeting Recording Expiration Policy. Error: $($ErrorMessage.NormalizedError)" -sev Error -LogData $ErrorMessage |
| 60 | + } |
| 61 | + } |
| 62 | + } |
| 63 | + |
| 64 | + if ($Settings.alert -eq $true) { |
| 65 | + if ($StateIsCorrect -eq $true) { |
| 66 | + Write-LogMessage -API 'Standards' -tenant $Tenant -message "Teams Meeting Recording Expiration Policy is set correctly ($($CurrentExpirationDays) days)." -sev Info |
| 67 | + } else { |
| 68 | + Write-StandardsAlert -message "Teams Meeting Recording Expiration Policy is not set correctly. Current: $CurrentExpirationDays days, Desired: $ExpirationDays days." -object $CurrentExpirationDays -tenant $Tenant -standardName 'TeamsMeetingRecordingExpiration' -standardId $Settings.standardId |
| 69 | + Write-LogMessage -API 'Standards' -tenant $Tenant -message "Teams Meeting Recording Expiration Policy is not set correctly (Current: $CurrentExpirationDays, Desired: $ExpirationDays)." -sev Info |
| 70 | + } |
| 71 | + } |
| 72 | + |
| 73 | + if ($Settings.report -eq $true) { |
| 74 | + Add-CIPPBPAField -FieldName 'TeamsMeetingRecordingExpiration' -FieldValue $CurrentExpirationDays -StoreAs string -Tenant $Tenant |
| 75 | + |
| 76 | + $CurrentExpirationDays = [PSCustomObject]@{ |
| 77 | + ExpirationDays = [string]$CurrentExpirationDays |
| 78 | + } |
| 79 | + Set-CIPPStandardsCompareField -FieldName 'standards.TeamsMeetingRecordingExpiration' -FieldValue $CurrentExpirationDays -Tenant $Tenant |
| 80 | + } |
| 81 | +} |
0 commit comments