Start >
M365 >
Data Lifecycle Management >
Retention Public Folders
L1
BIO 16.01
ISO A.12.4.1
CIS 18.9.19.2
Retention Public Folders
π
2025-10-30
β’
β±οΈ 2 minuten lezen
β’
π΄ Must-Have
π₯ Download
π Bookmark
π€ Share
πΌ Management Samenvatting
Deze security regelen waarborgt de correcte configuratie van beveiligingsinstellingen op Windows endpoints.
Implementatie
2u (tech: 1u)
Van toepassing op:
β Windows
Deze instelling is onderdeel van de Windows security baseline en beschermt tegen bekende aanvalsvectoren door het afdwingen van veilige configuraties.
PowerShell Modules Vereist
Primary API: Graph
Connection: Connect-MgGraph
Required Modules: Microsoft.Graph.DeviceManagement
Implementatie
Dit regelen configureert retention public folders via Microsoft Intune apparaat configuratie beleid of compliance policies om Windows endpoints te beveiligen volgens security best practices.
Vereisten
m365
Implementatie
Gebruik PowerShell-script retention-public-folders.ps1 (functie Invoke-Monitoring) β Monitoren.
monitoring
Gebruik PowerShell-script retention-public-folders.ps1 (functie Invoke-Monitoring) β Controleren.
Gebruik PowerShell-script retention-public-folders.ps1 (functie Invoke-Remediation) β Herstellen.
Compliance en Auditing
Beleid documentatie
Compliance & Frameworks
CIS M365: Control 18.9.19.2 (L1) - CIS Security Benchmark aanbevelingen
BIO: 16.01 - BIO Baseline Informatiebeveiliging Overheid - 16.01 - Gebeurtenissen logging en audittrails
ISO 27001:2022: A.12.4.1 - ISO 27001:2022 - Gebeurtenissen logging en audittrails
Automation
Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).
<
.SYNOPSIS
Retention Policy Public Folders 7 Jaar
.DESCRIPTION
Configures 7 -year retention policy for Exchange Public Folders.
Ensures compliance with Dutch legal retention requirements.
.NOTES
Filename: retention-public-folders.ps1
Author: Nederlandse Baseline voor Veilige Cloud
Category: data-lifecycle-management
.EXAMPLE
.\retention-public-folders.ps1 -Monitoring
Check if 7 -year retention is configured for public folders
.EXAMPLE
.\retention-public-folders.ps1 -Remediation
Create 7 -year retention policy for public folders
[CmdletBinding()]
param (
[Parameter(Mandatory = $false )]
[switch ]$Monitoring ,
[Parameter(Mandatory = $false )]
[switch ]$Remediation ,
[Parameter(Mandatory = $false )]
[switch ]$Revert ,
[switch ]$WhatIf
)
$ErrorActionPreference = 'Stop'
$script :RetentionDays = 2555
$script :RetentionYears = 7
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "Retention Policy Public Folders 7 Jaar" -ForegroundColor Cyan
Write-Host "========================================`n" -ForegroundColor Cyan
function Invoke-Monitoring {
try {
Write-Host "Connecting to Security & Compliance..." -ForegroundColor Gray
Connect-IPPSSession -ShowBanner:$false -ErrorAction Stop
Write-Host "Checking retention policies for Public Folders..." -ForegroundColor Gray
$policies = Get-RetentionCompliancePolicy -ErrorAction Stop |
Where-Object { $_ .PublicFolderLocation -ne $null -and $_ .PublicFolderLocation.Count -gt 0 }
$result = @{
isCompliant = $false
total = $policies .Count
compliant = 0
policyDetails = @()
}
if ($policies .Count -eq 0 ) {
Write-Host " [FAIL] No Public Folder retention policies found" -ForegroundColor Red
}
else {
foreach ($policy in $policies ) {
$rules = Get-RetentionComplianceRule -Policy $policy .Name -ErrorAction SilentlyContinue
$maxDuration = 0
foreach ($rule in $rules ) {
if ($rule .RetentionDuration) {
$duration = [int]$rule .RetentionDuration
if ($duration -gt $maxDuration ) {
$maxDuration = $duration
}
if ($duration -ge $script :RetentionDays -and $policy .Enabled) {
$result .compliant++
$result .isCompliant = $true
}
}
}
$daysText = "$maxDuration days (~$([math]::Round($maxDuration / 365 , 1 )) years)"
$status = if ($maxDuration -ge $script :RetentionDays) { "[OK]" } else { "β οΈ" }
Write-Host " $status $($policy .Name): $daysText " -ForegroundColor $(
if ($maxDuration -ge $script :RetentionDays) { "Green" } else { "Yellow" }
)
$result .policyDetails += @{
Name = $policy .Name
Duration = $maxDuration
Enabled = $policy .Enabled
}
}
}
Write-Host "`n Total policies: $($result .total)" -ForegroundColor Cyan
Write-Host " Compliant (β₯7 years): $($result .compliant)" -ForegroundColor $(
if ($result .compliant -gt 0 ) { "Green" } else { "Red" }
)
if ($result .isCompliant) {
Write-Host "`n[OK] COMPLIANT - 7 -year retention configured" -ForegroundColor Green
exit 0
}
else {
Write-Host "`n[FAIL] NON-COMPLIANT - Configure 7 -year retention" -ForegroundColor Red
exit 1
}
}
catch {
Write-Host "`n[FAIL] ERROR: $_ " -ForegroundColor Red
exit 2
}
}
function Invoke-Remediation {
try {
Write-Host "Connecting to Security & Compliance..." -ForegroundColor Gray
Connect-IPPSSession -ShowBanner:$false -ErrorAction Stop
$policyName = "Public Folders $script :RetentionYears Year Retention - NL Baseline"
Write-Host "Creating retention policy..." -ForegroundColor Gray
Write-Host " Policy name: $policyName " -ForegroundColor Cyan
Write-Host " Retention: $script :RetentionYears years ($script :RetentionDays days)" -ForegroundColor Cyan
$policy = New-RetentionCompliancePolicy -Name $policyName `
-Comment "Nederlandse Baseline voor Veilige Cloud - 7 jaar bewaarplicht" `
-PublicFolderLocation All `
-Enabled $true `
-ErrorAction Stop
Write-Host " [OK] Policy created" -ForegroundColor Green
Write-Host "Creating retention rule..." -ForegroundColor Gray
$rule = New-RetentionComplianceRule -Name "$policyName - Rule" `
-Policy $policyName `
-RetentionDuration $script :RetentionDays `
-RetentionComplianceAction Keep `
-ErrorAction Stop
Write-Host " [OK] Rule created" -ForegroundColor Green
Write-Host "`n[OK] 7 -year retention configured for Public Folders" -ForegroundColor Green
Write-Host "`nPolicy details:" -ForegroundColor Cyan
Write-Host " β’ Location: All Public Folders" -ForegroundColor Gray
Write-Host " β’ Duration: $script :RetentionYears years" -ForegroundColor Gray
Write-Host " β’ Action: Keep (retain)" -ForegroundColor Gray
Write-Host " β’ Status: Enabled" -ForegroundColor Gray
exit 0
}
catch {
Write-Host "`n[FAIL] ERROR: $_ " -ForegroundColor Red
exit 2
}
}
function Invoke-Revert {
try {
Write-Host "β οΈ WARNING: Removing retention policy!" -ForegroundColor Yellow
Write-Host "Connecting to Security & Compliance..." -ForegroundColor Gray
Connect-IPPSSession -ShowBanner:$false -ErrorAction Stop
$policyName = "Public Folders $script :RetentionYears Year Retention - NL Baseline"
$policy = Get-RetentionCompliancePolicy -Identity $policyName -ErrorAction SilentlyContinue
if ($policy ) {
Remove-RetentionCompliancePolicy -Identity $policyName -Confirm:$false -ErrorAction Stop
Write-Host " [OK] Policy removed" -ForegroundColor Yellow
}
else {
Write-Host " Policy not found" -ForegroundColor Gray
}
exit 0
}
catch {
Write-Host "[FAIL] ERROR: $_ " -ForegroundColor Red
exit 2
}
}
try {
if ($Revert ) {
Invoke-Revert
}
elseif ($Monitoring ) {
Invoke-Monitoring
}
elseif ($Remediation ) {
Invoke-Remediation
}
else {
Write-Host "Usage:" -ForegroundColor Yellow
Write-Host " -Monitoring Check current retention policies" -ForegroundColor Gray
Write-Host " -Remediation Create 7 -year retention policy" -ForegroundColor Gray
Write-Host " -Revert Remove retention policy" -ForegroundColor Gray
}
}
catch {
throw
}
finally {
Write-Host "`n========================================`n" -ForegroundColor Cyan
}
Risico zonder implementatie
Risico zonder implementatie
High: No auth tracking.
Management Samenvatting
Schakel in audit logging.
Implementatietijd: 2 uur
FTE required: 0.01 FTE