Exchange Online Cleanup: Skriptem smaž 10 GB mrtvých příloh za minutu Webseidon Lukáš Adámek Vítkov Odry Fulnek Klokočov webdeveloper webdesigner

Exchange Online Cleanup: Skriptem smaž 10 GB mrtvých příloh za minutu

Exchange Online Cleanup: Skriptem smaž 10 GB mrtvých příloh za minutu

Exchange Online Cleanup: Skriptem smaž 10 GB mrtvých příloh za minutu

Exchange Online má (v Business Basic) 50 GB limit na schránku. Zní to hodně, dokud účetní nepošle 200 MB XLS přílohu 40 lidem. Ruční procházení pošty je nereálné, retention policy zabere dny a GUI je pomalé. Řešení? PowerShell V3 EXO modul a ComplianceSearch. Za pár řádků najdeme 100 MB+ přílohy, exportujeme CSV report, smažeme (respektive přesuneme do Recoverable Items) a pošleme manažerovi přehled, kolik peněz licence právě ušetřila.



1 · Proč řešit úklid příloh

  • Licenční peníze. Přechod na E3/E5 kvůli velikosti mailboxů je drahý.
  • Odezva Outlooku. Menší OST = rychlejší hledání.
  • Compliance. Mazání starých Teams chatů s daty zákazníků.
  • Backup okno. Menší data → rychlejší Veeam/3rd‑party backup.

2 · Instalace EXO V3 modulu & připojení

Install-Module -Name ExchangeOnlineManagement -Force
Connect-ExchangeOnline -UserPrincipalName admin@firma.cz -ShowBanner:$false

Potřebuješ roli Compliance Search + Mailbox Import Export (role group eDiscovery Manager).


New-ComplianceSearch → Start-ComplianceSearch → Get-ComplianceSearch. Výsledek se uloží do Compliance Center, cmdlet New-ComplianceSearchAction umí Export nebo Purge.

3.1 Omezení

  • Max 10 000 mailboxů na hledání
  • Purge natrvalo (-PurgeType HardDelete) nebo do Deleted Items (SoftDelete)
  • Rate‑limit ~ 50 MB/min na Purge

4 · Vytvoření reportu velkých příloh

$q   = 'size>50MB AND kind:email'
$name= "HugeAttachments_$(Get-Date -F yyyyMMdd_HHmm)"
New-ComplianceSearch -Name $name -ExchangeLocation all -ContentMatchQuery $q
Start-ComplianceSearch -Identity $name
while((Get-ComplianceSearch $name).Status -ne 'Completed'){ Start-Sleep 5 }
$size = (Get-ComplianceSearch $name).Size
Write-Host "Nalezeno $size" -F Yellow

# Export report
New-ComplianceSearchAction -SearchName $name -Export -Format FxStream

Stáhne ZIP s CSV (Export_results.csv).


5 · Skript Invoke-ExoCleanup.ps1

param(
  [int]$ThresholdMB = 50,
  [switch]$ReportOnly,
  [string]$TeamsWebhook
)

Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -CertificateThumbprint $thumb -AppId $appid -Organization firma.onmicrosoft.com

$q="size>$($ThresholdMB)MB AND kind:email"
$n="AutoCleanup_$(Get-Date -F yyyyMMdd_HHmm)"
New-ComplianceSearch -Name $n -ExchangeLocation all -ContentMatchQuery $q | Out-Null
Start-ComplianceSearch $n
do { $s=Get-ComplianceSearch $n; Start-Sleep 5 } until ($s.Status -eq 'Completed')

if ($ReportOnly) {
    New-ComplianceSearchAction -SearchName $n -Export -Format FxStream
} else {
    New-ComplianceSearchAction -SearchName $n -Purge -PurgeType SoftDelete
}

# Teams zpráva
if ($TeamsWebhook){
  $txt="Cleanup `$ThresholdMB MB`+: $($s.Items) mailů, $($s.Size)"
  Invoke-RestMethod -Method Post -Uri $TeamsWebhook -Body (@{text=$txt}|ConvertTo-Json) -ContentType 'application/json'
}

6 · Remove Teams meeting chaos

Teams meetingy starší 180 dní (HTML pozvánky 150 KB × tisíce):

$q='subject:"Microsoft Teams Meeting" AND received<2024-11-01'
New-ComplianceSearch -Name OldTeams -ExchangeLocation all -ContentMatchQuery $q
Start-ComplianceSearch OldTeams
New-ComplianceSearchAction -SearchName OldTeams -Purge -PurgeType SoftDelete

7 · Automatizace: měsíční úklid

# Task Scheduler
$act = New-ScheduledTaskAction -Execute 'pwsh' `
 -Argument '-File C:\Scripts\Invoke-ExoCleanup.ps1 -ThresholdMB 80 -TeamsWebhook https://…'
$trg = New-ScheduledTaskTrigger -Monthly -DaysOfMonth 1 -At 02:00
Register-ScheduledTask -TaskName 'ExoCleanup' -Action $act -Trigger $trg -User SYSTEM

8 · Compliance & retention – nenech se vyhodit

  • Purge přesouvá do Deletions (Recoverable Items) – drží se 14 dní default.
  • Pokud je mailbox pod Litigation Hold, HardDelete neprojde.
  • MFA: použij App‑Only cert auth (Azure AD app reg).
  • Logy: Audit log v M365, plus export Get-ComplianceSearch CSV.

9 · Case study: 120 GB pryč, licence ušetřena

MetodaMailbox průměrLicenční náklady
Před skriptem47 GBE3 upgrade hrozí
Po cleanup31 GBZůstává Business Basic

Čas skriptu: 15 min test + 45 min purge. Úspora: 4 €/uživatel × 100 uživatelů × 12 m = 48 000 Kč/rok.


10 · FAQ

Můžu mazat i OneDrive přílohy?
ComplianceSearch ContentMatchQuery podporuje SharePointLocation – stejný princip.
Co s přílohami v Public Folders?
Nastav ExchangeLocation PublicFolders v searchi.
HardDelete vs. SoftDelete?
SoftDelete → Recoverable Items (uživatel obnoví); HardDelete → nenávratně pryč (nutná rola Data Investigator).

11 · Závěr

PowerShell + EXO modul = rychlý skalpel na tlusté mailboxy. Místo dražších licencí a klikání v GUI zvládneš úklid za minutu a ještě pošleš report, který okouzlí CFO. Příště, až ti někdo řekne „Mailbox je plný“, odpověz: „Dej mi chvíli, spustím skript.“


Klíčová slova

exchange online powershell, mailbox cleanup, remove large attachments, compliance search, teams meeting cleanup, m365 storage cost, exo v3 module, purge mailbox items, retention policy

↥ Zpět nahoru

Sdílejte na sítích

Webseidon
Webseidon
Articles: 32