Skip to content

Commit ebcaa63

Browse files
committed
feat: add Teams Meeting Recording Expiration standard
1 parent f3d5cd0 commit ebcaa63

File tree

3 files changed

+85
-6
lines changed

3 files changed

+85
-6
lines changed

Modules/CIPPCore/Public/Standards/Invoke-CIPPStandardStaleEntraDevices.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ function Invoke-CIPPStandardStaleEntraDevices {
77
.SYNOPSIS
88
(Label) Cleanup stale Entra devices
99
.DESCRIPTION
10-
(Helptext) Cleans up Entra devices that have not connected/signed in for the specified number of days.
11-
(DocsDescription) Cleans up Entra devices that have not connected/signed in for the specified number of days. First disables and later deletes the devices. More info can be found in the [Microsoft documentation](https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices)
10+
(Helptext) Remediate is currently not available. Cleans up Entra devices that have not connected/signed in for the specified number of days.
11+
(DocsDescription) Remediate is currently not available. Cleans up Entra devices that have not connected/signed in for the specified number of days. First disables and later deletes the devices. More info can be found in the [Microsoft documentation](https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices)
1212
.NOTES
1313
CAT
1414
Entra (AAD) Standards
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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+
}

Tools/Update-StandardsComments.ps1

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,10 @@ foreach ($Standard in $StandardsInfo) {
106106
$NewComment.Add(" $(ConvertTo-Json -InputObject $Value -Depth 5 -Compress)`n")
107107
}
108108
continue
109-
}
110-
elseif ($Property.Value -is [System.Management.Automation.PSCustomObject]) {
109+
} elseif ($Property.Value -is [System.Management.Automation.PSCustomObject]) {
111110
$NewComment.Add(" $(ConvertTo-Json -InputObject $Property.Value -Depth 5 -Compress)`n")
112111
continue
113-
}
114-
else {
112+
} else {
115113
if ($null -ne $Property.Value) {
116114
$NewComment.Add(" $(EscapeMarkdown($Property.Value.ToString()))`n")
117115
}

0 commit comments

Comments
 (0)