Exchange Online Migratieprogramma Binnen De Nederlandse Baseline Voor Veilige Cloud

💼 Management Samenvatting

Een migratie naar Exchange Online is in de Nederlandse publieke sector meer dan het verplaatsen van mailboxen: het is een bestuurlijk dossier dat raakt aan continuïteit van democratische besluitvorming, wettelijke archivering en het vertrouwen van burgers. Binnen de Nederlandse Baseline voor Veilige Cloud geldt dat alleen een aantoonbaar geregisseerde aanpak toelaatbaar is, waarin techniek, governance en documentatie gelijktijdig volwassen worden.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
680u (tech: 420u)
Van toepassing op:
Microsoft 365
Exchange Online
Exchange Server 2016/2019
Entra ID
Azure AD Connect
Microsoft Purview

Veel overheidsorganisaties draaien nog hybride mailomgevingen waarin verouderde TLS-instellingen, maatwerktransportregels en losstaande journalingconstructies samenkomen. Hierdoor ontstaan kwetsbaarheden voor phishing, segmentatieproblemen binnen soevereine cloudzones en bewijsachterstanden rondom AVG en Archiefwet. Daarnaast stelt NIS2 dat e-mail als essentiële dienst moet worden gemonitord en dat incidenten binnen 24 uur gemeld moeten kunnen worden. Zonder gestandaardiseerde migratiestructuur blijft het vrijwel onmogelijk om deze eisen te verenigen met lopende werkzaamheden en budgettaire realiteit.

PowerShell Modules Vereist
Primary API: Exchange Online PowerShell, Microsoft Graph Reports, Azure AD Connect Health
Connection: Connect-ExchangeOnline; Connect-MgGraph -Scopes Reports.Read.All; Get-AzureADSSOStatus
Required Modules: ExchangeOnlineManagement, Microsoft.Graph.Reports, Microsoft.Graph.Identity.DirectoryManagement

Implementatie

Dit artikel beschrijft hoe je een Exchange Online migratie inricht volgens de principes van de Nederlandse Baseline voor Veilige Cloud: eerst bestuurlijke verankering en risicobereidheid, vervolgens een architectuur- en datafundament, daarna scriptgestuurde uitvoering met realtime monitoring en tot slot nazorg waarin auditdossiers, lessons learned en capaciteitsplanning samenkomen. Elk onderdeel verwijst naar concreet bewijsmateriaal, beleidskaders en een PowerShell-script dat zowel productie als lokale debugruns ondersteunt zodat teams veilig kunnen oefenen voordat er werkelijke mailboxen worden geraakt.

Bestuurlijke verankering en besluitvorming

Een migratieprogramma krijgt alleen groen licht wanneer bestuurders expliciet vastleggen waarom Exchange Online essentieel is voor continuïteit van publieke dienstverlening. Het college, de directieraad of het departementaal CIO-beraad koppelt migratiedoelen aan strategische uitgangspunten zoals weerbaarheid tegen ransomware, digitale soevereiniteit en transparantie richting volksvertegenwoordiging. Deze besluiten worden opgenomen in het cloud governance register dat bij de Nederlandse Baseline voor Veilige Cloud hoort, inclusief verwijzing naar de BIO, de Archiefwet en de actuele risicobereidheid. Door het besluit te voorzien van triggers – bijvoorbeeld het maximum aantal toegestane verstoringsuren of de eis om elke fase af te sluiten met een auditrapport – ontstaat een toetsingskader dat projectteams beschermt tegen opportunistische scopewijzigingen.

De tweede stap is het inrichten van een multidisciplinair migratieboard waarin bestuurders, CISO, FG, Chief Data Officer, service owner messaging en vertegenwoordigers van lijnorganisaties samenkomen. Dit board bepaalt sleutelrollen (proceseigenaar, change manager, communicatiemanager), autoriseert budgetten en stelt een escalatiematrijs vast waarmee incidenten binnen en buiten kantooruren worden afgehandeld. Besluiten worden gedocumenteerd met uniek referentienummer zodat een auditor exact kan zien welk risico wanneer is geaccepteerd. Het board beoordeelt ook afhankelijkheden: als SharePoint, Teams of Purview gelijktijdig veranderen, worden gezamenlijke checkpoints gedefinieerd zodat communicatie naar gebruikers en ketenpartners consistent blijft.

Bovendien vereist de Baseline dat governance geen papieren tijger blijft. Proceseigenaren koppelen migratiemaandplannen aan concrete KPI’s: percentage mailboxen dat onder litigtation hold valt, hoeveelheid processen met goedgekeurde DPIA, aantal ketenpartners dat contractueel akkoord is met gewijzigde TLS-routes. Deze KPI’s komen terug in maandelijkse rapportages richting bestuur en ondernemingsraad. Door cijfers te verbinden aan besluitvorming kan een raadslid of Kamerlid binnen minuten zien welke impact een vertraging heeft op burgercommunicatie.

Ten slotte wordt governance verankerd in contracten en interne policies. Terms of Reference voor leveranciers bevatten eisen over data residency, failovertests en responstijden. Interne policies beschrijven hoe medewerkers omgaan met onderhoudsvensters, hoe escalaties via het security operations center verlopen en wie verantwoordelijk is voor communicatie bij storingen. Elk document verwijst naar dezelfde migratiescope, zodat inspecties, rekenkamers en accountants onmiddellijk kunnen toetsen of uitvoering overeenkomt met de bestuurlijke intentie. Zo ontstaat een sluitende managementketen waarin techniek, budget en compliance aantoonbaar in balans blijven.

Architectuurontwerp en datamigratie onder toezicht

Strategische besluiten worden vertaald naar een integraal architectuurontwerp. Architecten brengen alle mailstromen, journalingoplossingen, applicatiemailboxen, multifunctionals en brokered SMTP-relays in kaart. Ze classificeren iedere stroom met hetzelfde taxonomieframework dat in de Nederlandse Baseline voor Veilige Cloud wordt gebruikt, zodat duidelijk is welke gegevens uitsluitend binnen EU-geo mogen blijven en welke workloads multi-geo vereisen. Voor iedere afhankelijkheid wordt de gewenste eindsituatie beschreven: gaat een archief naar Exchange Online archiving, naar Microsoft 365 Backup of naar een extern e-depot dat onder de Archiefwet valt? Deze catalogus vormt de bron voor scopebeheer, changecontrol en rapportages richting ketenpartners.

Parallel voert het data- en privacyteam een diepgaande analyse uit op bewaartermijnen, retentie-etiketten en juridisch status van PST-bestanden of legacy archieven. De Functionaris voor Gegevensbescherming bekijkt of bestaande DPIA’s moeten worden geactualiseerd en of aanvullende specifieke maatregelen nodig zijn voor bijzondere persoonsgegevens (bijvoorbeeld dossiers binnen zorg, handhaving of jeugdbescherming). Resultaten worden gekoppeld aan Microsoft Purview configuraties, zodat retentielabels, eDiscovery cases en bewijs van exportbeperkingen vooraf klaar staan. Hierdoor kan tijdens de migratie nooit twijfel ontstaan over de rechtmatigheid van dataoverdracht.

Identity en netwerk vormen het derde fundament. Teams controleren Azure AD Connect configuraties, Pass-through Authentication, Seamless SSO en het gebruik van cloud-only accounts. TLS 1.2 en modern authentication worden verplicht gesteld op alle connectors en clients, terwijl Conditional Access policies worden uitgebreid met blokkeringsregels voor oude protocollen. Daarnaast wordt Entra ID Protection gebruikt om afwijkende aanmeldpatronen te detecteren zodra hybride servers worden uitgefaseerd. Netwerkarchitecten toetsen of mailflow via inspectiepunten gaat die voldoen aan Rijksbrede of gemeentelijke versleutelingsrichtlijnen en reserveren bandbreedte voor bulkoverdrachten. Deze technische randvoorwaarden worden via diagrams en referentiearchitecturen opgenomen in het ISMS.

Tot slot worden pilots uitgevoerd met representatieve gebruikersgroepen, inclusief ketenpartners en devices buiten het domein. Elke pilot levert meetwaarden op over migratiesnelheid, throttling, clientgedrag, transportregels en ondersteuning van No-Reply mailboxen. Afwijkingen leiden tot aanpassingen in planning of mitigaties zoals het aanvragen van een Microsoft FastTrack escalatie, het inzetten van mailbox discovery scripts of het tijdelijk isoleren van legacy journal databases. Door elke pilot als mini-change te behandelen ontstaat tastbaar bewijs dat productie cutovers beheerst verlopen.

Uitvoering, monitoring en scriptgestuurde bewijslast

Wanneer governance en ontwerp op orde zijn, verschuift de aandacht naar uitvoering. Migratiebatches worden gepland op basis van proceseigenaren, afhankelijkheden en risicoprofielen. Elke batch krijgt een change-ID, communicatieplan, rollbackscenario en een lijst met mandatory controls zoals licentietoewijzing, modern authentication en toegepaste retentielabels. In de war room zitten vertegenwoordigers van messaging, identity, netwerk, SOC, servicedesk en communicatie. Zij werken met dezelfde dashboards, zodat operationele verstoringen direct in dezelfde context worden beoordeeld als compliance-afwijkingen.

Gebruik PowerShell-script exchange-online-migration.ps1 (functie Invoke-ExchangeOnlineMigrationAssessment) – Verzamelt live-telemetrie en lokale debugdata voor Exchange Online migraties, beoordeelt endpoints, batches, journaling, retentie en identity-synchronisatie, en levert JSON/CSV rapportages die voldoen aan audit- en bestuurseisen..

Het script fungeert als centrale kwaliteitscontrole. In productiemodus maakt het verbinding met Exchange Online PowerShell en Microsoft Graph om batchstatussen, MRS-statistieken, licenties, autodiscover-instellingen, journalingrules en Purview-retentielabels te controleren. In local debugmodus leest het dezelfde structuur uit een JSON-bestand, zodat teams de volledige run kunnen testen binnen 15 seconden zonder de tenant te belasten. Output bestaat uit een samenvatting (succeeded, degraded, failed), detailrapporten per batch en een bewijsbestand met hashes en timestamps. Hierdoor kan het migratieboard aantonen dat elke wijziging vooraf is gevalideerd en achteraf is vastgelegd.

Naast technische checks genereert het script KPI’s voor bestuurders: percentage mailboxen met toegewezen archief, aantal endpoints met basis-authenticatie, hoeveelheid openstaande cutoverissues en rapportages over dataresidency. Door automatische exports naar Power BI of Fabric-dashboard worden afwijkingen realtime zichtbaar en kunnen communicatieteams gericht updates sturen naar bestuur, OR en ketenpartners. Het script maakt ook verbinding met ITSM-API’s of schrijft een CSV die eenvoudig kan worden geïmporteerd, zodat elke bevinding automatisch een ticket krijgt.

De uitvoering sluit elke batch af met een gezamenlijke beoordeling: zijn alle gebruikers succesvol aangemeld, werken gedeelde mailboxen en vergaderruimtes, is journaling actief en zijn archieven consistent? De evaluatie gebruikt dezelfde scriptoutput als input voor lessons learned. Wanneer KPI’s buiten toleranties vallen, wordt de volgende batch automatisch vertraagd en bespreekt het migratieboard welk compenserend besluit nodig is. Zo blijft uitvoering aantoonbaar, voorspelbaar en bestuurbaar.

Nazorg, auditdossiers en continue verbetering

Na de laatste cutover start de nazorgfase waarin oude servers worden afgebouwd, contracten worden aangepast en beheerprocessen worden geactualiseerd. On-premises Exchange-servers gaan in read-only mode totdat het bestuur bevestigt dat alle data is geborgd, waarna ze gecontroleerd worden uitgefaseerd volgens het continuïteitsplan. Tegelijkertijd worden runbooks voor incidenten, wijzigingen en capaciteitsplanning herschreven zodat ze aansluiten op Exchange Online en Defender voor Office 365. Deze runbooks worden vastgelegd in het ISMS en gekoppeld aan dezelfde risicoregisters als de migratie.

Auditability staat centraal. Het team consolideert bewijs uit changeformulieren, scriptoutput, Purview-rapportages en ITSM-tickets in een append-only SharePoint of Azure Storage container. Elk bestand krijgt een hash, versienummer en bewaartermijn van minimaal zeven jaar. Hierdoor kan een rekenkamer of toezichthouder jaren later exact zien hoe elke batch is verlopen, welke issues zijn opgetreden en welke beslissingen zijn genomen. Deze transparantie sluit aan bij de verantwoordingsplicht in AVG artikel 5 en de rapportage-eisen uit NIS2 artikel 21.

Daarnaast wordt een structureel verbeterprogramma opgezet. Bevindingen uit migratie en nazorg worden vertaald naar backlog-items voor identity, netwerk, Purview, adoptie en training. Denk aan het versneld uitschakelen van legacyclients, het uitbreiden van Conditional Access policies of het automatiseren van licentiecontrole. Elk verbeteritem krijgt een eigenaar, budget en deadline en wordt besproken in dezelfde governancefora zodat verbeteracties niet los komen te staan van de oorspronkelijke migratiescope.

Tot slot worden ketenpartners en leveranciers geëvalueerd. Contracten voor migratietools, integrators of hostingpartners worden aangepast op basis van werkelijke prestaties en lessons learned. Daarbij wordt geborgd dat SLA’s, data residency clausules en security-eisen identiek zijn aan de Nederlandse Baseline voor Veilige Cloud. Door nazorg, audit en verbetercyclus te integreren, verandert de migratie van een project in een blijvende capability om e-maildiensten toekomstbestendig te houden.

Compliance & Frameworks

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).

PowerShell
#requires -Version 7.0 #requires -Modules ExchangeOnlineManagement <# .SYNOPSIS Controleert de gereedheid en voortgang van Exchange Online migraties binnen de Nederlandse Baseline voor Veilige Cloud. .DESCRIPTION Het script verzamelt live-telemetrie (of optioneel lokale debugdata) over migration endpoints, batches, journaling, retentie en identity-synchronisatie. De output bestaat uit een rapportobject met status, bevindingen, KPI's en bronnen. Gebruik de lokale debugmodus om scripts te testen zonder verbinding te maken met Exchange Online; zo blijft elke testrun binnen 15 seconden en kan beleid worden gevalideerd voordat productie wordt geraakt. .EXAMPLE .\exchange-online-migration.ps1 -Verbose -OutputPath .\reports\exchange-tenant01.json -ConnectGraph .EXAMPLE .\exchange-online-migration.ps1 -UseLocalData -LocalDataPath .\samples\eom-local-debug.json -PassThru .NOTES Project: Nederlandse Baseline voor Veilige Cloud Author : NBVC Automation Team #> [CmdletBinding()] param( [switch]$UseLocalData, [string]$LocalDataPath, [string]$OutputPath = (Join-Path -Path (Get-Location) -ChildPath ("exchange-online-migration-report-{0:yyyyMMddHHmmss}.json" -f (Get-Date))), [switch]$PassThru, [switch]$ConnectGraph ) Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' function New-EomFinding { [CmdletBinding()] param( [Parameter(Mandatory)] [ValidateSet('Info','Medium','High','Critical')] [string]$Severity, [Parameter(Mandatory)] [string]$Title, [Parameter(Mandatory)] [string]$Description, [string]$Recommendation ) return [pscustomobject]@{ Severity = $Severity Title = $Title Description = $Description Recommendation = $Recommendation } } function Get-EomLocalDataset { [CmdletBinding()] param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Path ) if (-not (Test-Path -Path $Path -PathType Leaf)) { throw "Local debugbestand '$Path' bestaat niet." } Write-Verbose "Laad lokale debugdata van $Path" return Get-Content -Path $Path -Raw | ConvertFrom-Json -Depth 6 } function Get-EomLiveDataset { [CmdletBinding()] param( [switch]$ConnectGraph ) Write-Verbose "Verzamelt live Exchange Online telemetrie" $dataset = [ordered]@{} $dataset.Organization = Get-OrganizationConfig $dataset.MigrationConfig = Get-MigrationConfig $dataset.TransportConfig = Get-TransportConfig $dataset.RemoteDomains = Get-RemoteDomain $dataset.MigrationEndpoints = Get-MigrationEndpoint | Select-Object Identity, EndpointType, MaxConcurrentMigrations, MaxConcurrentIncrementalSyncs, RemoteServer, Authentication, LastModifiedTime $dataset.MigrationBatches = Get-MigrationBatch | Select-Object Identity, Status, BatchType, AutoRetry, AutoComplete, StartAfter, CompleteAfter, LastModifiedTime, Report $dataset.JournalRules = Get-JournalRule $dataset.IntraOrgConnector = Get-IntraOrganizationConnector -ErrorAction SilentlyContinue $dataset.HybridConfig = Get-HybridConfiguration -ErrorAction SilentlyContinue $dataset.MailboxSample = Get-EXOMailbox -ResultSize 500 -Properties ArchiveStatus, LitigationHoldEnabled, WhenCreatedUTC, RecipientTypeDetails | Select-Object DisplayName, PrimarySmtpAddress, ArchiveStatus, LitigationHoldEnabled, WhenCreatedUTC, RecipientTypeDetails if ($ConnectGraph.IsPresent) { if (-not (Get-Module -ListAvailable -Name Microsoft.Graph.Reports)) { Write-Warning "Microsoft.Graph.Reports module niet gevonden; Graph statistieken worden overgeslagen." } else { try { if (-not (Get-Module -Name Microsoft.Graph -ListAvailable)) { Import-Module Microsoft.Graph -ErrorAction Stop | Out-Null } Write-Verbose "Maak verbinding met Microsoft Graph Reports" Connect-MgGraph -Scopes Reports.Read.All | Out-Null $emailActivity = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/v1.0/reports/getEmailActivityCounts(period='D7')" -ErrorAction Stop $dataset.EmailActivity = $emailActivity.Content } catch { Write-Warning "Graph rapportkon niet worden opgehaald: $($_.Exception.Message)" } finally { Disconnect-MgGraph -ErrorAction SilentlyContinue | Out-Null } } } return $dataset } function Get-EomStatus { param( [Parameter(Mandatory)] [System.Collections.IEnumerable]$Findings ) if ($Findings | Where-Object { $_.Severity -eq 'Critical' }) { return 'Failed' } if ($Findings | Where-Object { $_.Severity -eq 'High' }) { return 'Degraded' } return 'Healthy' } function Invoke-ExchangeOnlineMigrationAssessment { param( [switch]$UseLocalData, [string]$LocalDataPath, [string]$OutputPath, [switch]$PassThru, [switch]$ConnectGraph ) $stopwatch = [System.Diagnostics.Stopwatch]::StartNew() $dataset = $null $connected = $false try { if ($UseLocalData) { if (-not $LocalDataPath) { throw "Gebruik -LocalDataPath om een lokaal datasetbestand op te geven." } $dataset = Get-EomLocalDataset -Path $LocalDataPath } else { $connectionInfo = $null if (Get-Command -Name Get-ConnectionInformation -ErrorAction SilentlyContinue) { $connectionInfo = Get-ConnectionInformation } if (-not $connectionInfo) { Connect-ExchangeOnline -ShowBanner:$false | Out-Null $connected = $true } $dataset = Get-EomLiveDataset -ConnectGraph:$ConnectGraph } $findings = [System.Collections.Generic.List[object]]::new() if (-not $dataset.MigrationEndpoints -or $dataset.MigrationEndpoints.Count -eq 0) { $findings.Add((New-EomFinding -Severity Critical -Title "Geen migration endpoints" -Description "Er zijn geen Exchange Online migration endpoints geconfigureerd, waardoor batches niet kunnen starten." -Recommendation "Configureer minimaal \u00e9\u00e9n Exchange Online migration endpoint met OAuth-authenticatie en valideer connectiviteit."))) } else { $legacyEndpoint = $dataset.MigrationEndpoints | Where-Object { $_.Authentication -notmatch 'OAuth' -and $_.Authentication -ne $null } if ($legacyEndpoint) { $findings.Add((New-EomFinding -Severity High -Title "Legacy authenticatie op endpoints" -Description "Een of meerdere migration endpoints gebruiken $($legacyEndpoint.Authentication -join ', ') waardoor modern authentication niet wordt afgedwongen." -Recommendation "Converteer de endpoints naar OAuth 2.0 of federated modern auth en verwijder basis-authenticatie."))) } } if ($dataset.Organization.OAuth2ClientProfileEnabled -ne $true) { $findings.Add((New-EomFinding -Severity High -Title "Modern authentication niet afgedwongen" -Description "OAuth2ClientProfileEnabled staat uit in de organisatieconfiguratie." -Recommendation "Voer Set-OrganizationConfig -OAuth2ClientProfileEnabled $true uit zodat Outlook-clients geen legacy protocollen meer gebruiken."))) } if ($dataset.TransportConfig.VerifySecureSubmitEnabled -ne $true) { $findings.Add((New-EomFinding -Severity Medium -Title "TLS handhaving ontbreekt" -Description "VerifySecureSubmitEnabled staat uit, hierdoor kan niet worden aangetoond dat alle verzonden e-mail TLS afdwingt." -Recommendation "Activeer TLS-verificatie op transportconfiguratie en documenteer compenserende maatregelen."))) } if (-not $dataset.JournalRules -or $dataset.JournalRules.Count -eq 0) { $findings.Add((New-EomFinding -Severity Medium -Title "Geen journalingregels gevonden" -Description "Er zijn geen journalingregels zichtbaar; archiefwaardige communicatie kan buiten scope vallen." -Recommendation "Implementeer journaling naar een compliant opslag of documenteer waarom Purview Records het alternatief levert."))) } $batchesInError = $dataset.MigrationBatches | Where-Object { $_.Status -in @('Failed','Stopped') } if ($batchesInError) { $findings.Add((New-EomFinding -Severity High -Title "Migratiebatches met fouten" -Description ("De volgende batches staan in status Failed/Stopped: {0}" -f (($batchesInError | Select-Object -ExpandProperty Identity) -join ', ')) -Recommendation "Analyseer de rapporten en voer een herstart of rollback uit voordat nieuwe batches starten."))) } $litigationHolds = ($dataset.MailboxSample | Where-Object { $_.LitigationHoldEnabled }).Count $archiveEnabled = ($dataset.MailboxSample | Where-Object { $_.ArchiveStatus -eq 'Active' }).Count $mailboxCount = $dataset.MailboxSample.Count if ($mailboxCount -gt 0) { $archiveRatio = [math]::Round(($archiveEnabled / $mailboxCount) * 100, 2) if ($archiveRatio -lt 60) { $findings.Add((New-EomFinding -Severity Medium -Title "Archiefmailboxen niet geactiveerd" -Description "Slechts $archiveRatio% van de bemonsterde mailboxen heeft een actief archief." -Recommendation "Schakel Exchange Online archivering in voordat bulkdata wordt verplaatst."))) } $holdRatio = [math]::Round(($litigationHolds / $mailboxCount) * 100, 2) if ($holdRatio -lt 40) { $findings.Add((New-EomFinding -Severity Medium -Title "Litigation hold niet consequent toegepast" -Description "Minder dan 40% van de bemonsterde mailboxen heeft litigation hold, wat risico\u2019s oplevert voor archiefwaardige communicatie." -Recommendation "Review het hold-beleid en automatiseer toewijzing via Purview of PowerShell."))) } } $status = Get-EomStatus -Findings $findings $timestamp = Get-Date $report = [pscustomobject]@{ TenantName = $dataset.Organization.Name Status = $status Findings = $findings Metrics = @{ EndpointCount = ($dataset.MigrationEndpoints | Measure-Object).Count BatchCount = ($dataset.MigrationBatches | Measure-Object).Count FailedBatchCount = ($batchesInError | Measure-Object).Count MailboxSample = $mailboxCount ArchiveEnabledPct = if ($mailboxCount -gt 0) { [math]::Round(($archiveEnabled / $mailboxCount) * 100, 2) } else { 0 } LitigationHoldPct = if ($mailboxCount -gt 0) { [math]::Round(($litigationHolds / $mailboxCount) * 100, 2) } else { 0 } DatasetSource = if ($UseLocalData) { 'LocalDebug' } else { 'LiveTenant' } } Evidence = @{ Timestamp = $timestamp.ToUniversalTime() RuntimeMs = $stopwatch.ElapsedMilliseconds DatasetStamp = $dataset.MigrationConfig.WhenChangedUTC } RawData = $dataset } $directory = Split-Path -Path $OutputPath -Parent if ($directory -and -not (Test-Path -Path $directory)) { New-Item -ItemType Directory -Path $directory -Force | Out-Null } $report | ConvertTo-Json -Depth 6 | Set-Content -Path $OutputPath -Encoding UTF8 Write-Verbose "Rapport opgeslagen op $OutputPath" if ($PassThru) { return $report } } finally { $stopwatch.Stop() if ($connected) { Disconnect-ExchangeOnline -Confirm:$false } } } $invokeParams = @{ UseLocalData = $UseLocalData LocalDataPath = $LocalDataPath OutputPath = $OutputPath PassThru = $PassThru ConnectGraph = $ConnectGraph } Invoke-ExchangeOnlineMigrationAssessment @invokeParams

Risico zonder implementatie

Risico zonder implementatie
High: Zonder geregisseerde migratie blijven verouderde Exchange-servers in gebruik, lopen TLS- en compliance-achterstanden op en ontbreekt aantoonbare governance. Hierdoor stijgt het risico op datalekken, sancties en politieke interventies aanzienlijk.

Management Samenvatting

Leg bestuurlijke besluiten vast, ontwerp een integraal migratie- en datarapportageframe, voer batches scriptgestuurd uit en sluit af met auditklare nazorg zodat Exchange Online betrouwbaar, compliant en aantoonbaar beheersbaar wordt.