Intune Compliancebeleid Voor Apparaten

💼 Management Samenvatting

Intune-compliancebeleid vormt de poortwachter voor elk apparaat dat toegang vraagt tot Microsoft 365, omdat het real-time afdwingt of een device voldoet aan de minimale beveiligingsvoorwaarden van de Nederlandse Baseline voor Veilige Cloud.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
54u (tech: 36u)
Van toepassing op:
Microsoft Intune
Windows 10
Windows 11
Android Enterprise
iOS/iPadOS

Zonder centraal afgedwongen compliance raken organisaties afhankelijk van zelfverklaarde hygiëne, ontstaan schaduwapparaten en is het onmogelijk om tijdens audits of incidentonderzoeken te bewijzen dat apparaten daadwerkelijk aan BIO, AVG en NIS2 voldoen.

PowerShell Modules Vereist
Primary API: Microsoft Graph
Connection: Connect-MgGraph
Required Modules: Microsoft.Graph.DeviceManagement

Implementatie

Dit artikel beschrijft hoe je governance, policyontwerp, monitoring en remediatie voor Intune-compliancebeleid structureert, inclusief een script dat assessments en rapportages automatiseert en koppelt aan operationele processen.

Governance, Scope en Normstelling

Het succes van Intune-compliancebeleid begint niet bij techniek, maar bij duidelijke bestuurlijke kaders binnen de Nederlandse Baseline voor Veilige Cloud. Het bestuur benoemt device-compliance als primaire controle voor toegangsbeheer, verbindt het aan het risicoregister en maakt budget vrij voor licenties, automatisering en training. Het CISO-office vertaalt deze opdracht in beleid waarin staat dat elk apparaat dat toegang vraagt tot Microsoft 365 of bedrijfskritische SaaS-diensten aantoonbaar compliant moet zijn. In hetzelfde besluit wordt vastgelegd dat uitzonderingen slechts tijdelijk bestaan, dat eindverantwoordelijkheid bij de proceseigenaar ligt en dat escalaties plaatsvinden via het wijzigingsproces. Zo ontstaat een bestuurlijke context waarin beheerders niet continu hoeven te onderhandelen over minimumeisen, maar op basis van een mandaat kunnen sturen.

De scope van het complianceprogramma moet expliciet alle platformen bevatten die binnen de organisatie worden gebruikt, inclusief mobiele apparaten, werkplekken van leveranciers en gespecialiseerde devices in toezicht- of inspectieomgevingen. Voor elke categorie wordt vastgelegd welke minimale beveiligingsinstellingen gelden, welke certificeringen of BIOS-locks vereist zijn en wat de overgangsstrategie is voor verouderde hardware. Het beleid beschrijft ook hoe nieuwe diensten worden aangesloten: zodra een project een device introduceert, levert het projectteam configuratieprofielen aan, borgt het compliance-rapportages en accepteert het de standaard Conditional Access-eis dat alleen compliant apparaten productiedata mogen openen.

Vanuit risicomanagement wordt device-compliance direct gekoppeld aan dataclassificatie. Apparaten die persoonsgegevens in de zin van de AVG of staatsgeheime voorbereidingsinformatie verwerken, krijgen strengere baseline-instellingen, zoals verplicht TPM, volledige schijfversleuteling en een maximale patchachterstand van twee dagen. Deze differentiatie verschijnt in de risicotabel die het bestuur ondertekent, zodat audits eenvoudig kunnen aantonen dat de strengste klassen de juiste controles hebben. Tegelijkertijd krijgt de lijnorganisatie heldere indicatoren: zodra een apparaat met hoge classificatie buiten beleid valt, is het escalatiepad richting CISO en CIO vooraf beschreven en worden compenserende maatregelen automatisch geactiveerd.

Een volwassen governance-laag beschrijft verder hoe leveranciers en shared service centers worden betrokken. Contracten bevatten clausules waarin Intune-compliancepercentages als service level zijn opgenomen, inclusief boetebepalingen of stop-knoppen wanneer rapportages structurele hiaten tonen. Het beleid schrijft voor dat iedere externe beheerpartij dezelfde rapportageformaten gebruikt en dat exports vanuit Microsoft Graph in een centrale documentbibliotheek landen met retentie volgens Archiefwet. Door governance, scope, risicoklassen en leveranciersafspraken in één samenhangend hoofdstuk vast te leggen, wordt device-compliance een bestuurbare maatregel in plaats van een optelsom van losse profielen.

Policyontwerp en Intune-configuratie

Gebruik PowerShell-script intune-device-compliance-policies.ps1 (functie Invoke-PolicyAssessment) – Controleert automatisch of alle vereiste platformen een actueel compliancebeleid hebben, inclusief assignments en remediatie-acties binnen de afgesproken termijnen..

Het ontwerp van Intune-compliancebeleid begint met een referentie-architectuur voor elk platform. Organisaties beschrijven per platform welke instellingen minimaal moeten worden afgedwongen: voor Windows omvat dit BitLocker-status, antivirus, Secure Boot en actuele Windows-versies, terwijl Android Enterprise bijvoorbeeld versleuteling, schermvergrendeling en minimale OS-buildniveaus vereist. Deze architectuur wordt uitgewerkt in een sjabloon dat zowel technische instellingen als juridische randvoorwaarden bevat, zodat teams nooit hoeven te gokken welke parameters verplicht zijn. Het document hoort bij het changeproces en fungeert als uitgangspunt voor audits.

Vervolgens wordt het sjabloon vertaald naar concrete Intune-policies met behulp van herbruikbare scripts en Git-beheer. Het script intune-device-compliance-policies.ps1 biedt met de functie Invoke-PolicyAssessment een automatische toets op platformdekking, deadlines van remediatie-acties en aanwezigheid van assignments. De functie verifieert of elke policy een blokkerende actie binnen vierentwintig uur toepast, of notificatiesjablonen gekoppeld zijn en of de policy recent is bijgewerkt. Hierdoor signaleren beheerders direct welke beleidsobjecten dreigen te verouderen en waar configuraties niet langer overeenstemmen met de baseline. Door deze technische controle standaard op te nemen in pipelines van bijvoorbeeld GitHub Actions ontstaat een consistente kwaliteitsbarrière voordat wijzigingen naar productie gaan.

Tijdens het configureren worden policies gekoppeld aan dynamische Entra ID-groepen zodat apparaten automatisch in de juiste scope vallen. De ontwerpdocumentatie beschrijft hoe filters worden opgesteld voor Windows versus HoloLens, hoe Android Managed Home Screen-apparaten apart worden behandeld en hoe iOS apparaten van de Rijksbrede Werkplek worden onderscheiden van lokale gemeentelijke deployments. Tevens wordt vastgelegd hoe compliancepolicy-instellingen samenwerken met Device Configuration en Endpoint Security-profielen, zodat er geen tegenstrijdige instellingen ontstaan. Een ontwerpbesluit schrijft bijvoorbeeld voor dat root detection in compliancebeleid de automatische quarantaine triggert, terwijl het Device Configuration-profiel aanvullende restrictions en e-mailbeperkingen oplegt.

Tot slot worden integraties met bredere processen vastgelegd. Compliancegegevens voeden het SOC voor near-realtime detectie van jailbreaks of ongeautoriseerde OS-versies, terwijl het privacyteam bevestigt dat logging uitsluitend apparaattelemetrie bevat en geen inhoudelijke gebruikersdata. De configuratiehandleiding beschrijft hoe notificaties naar eindgebruikers verlopen, welke talen gebruikt worden en hoe servicedesk-scripts aansluiten op de meldingen die Intune verstuurt. Door ontwerp, technische implementatie, governance en communicatie als één geheel te behandelen, blijft het compliancebeleid begrijpelijk voor bestuurders en werkbaar voor beheerders.

Monitoring en Operationele Bewaking

Gebruik PowerShell-script intune-device-compliance-policies.ps1 (functie Invoke-ComplianceMonitoring) – Genereert een exporteerbaar overzicht van compliancepercentages per policy, markeert apparaten die langer dan 24 uur niet hebben gesynchroniseerd en waarschuwt wanneer drempels worden overschreden..

Operationele bewaking zorgt ervoor dat compliancepercentages niet alleen tijdens projectfasen worden gehaald maar ook in de dagelijkse praktijk. Monitoring begint met een datalaag waarin Graph-exporten, Intune-rapportages en SOC-signalen worden samengebracht. Dashboards tonen per platform het percentage compliant apparaten, het aantal devices dat langer dan vierentwintig uur offline is en welke policy het grootste risico vormt. Deze inzichten worden gekoppeld aan risicoklassen zodat bestuurders onmiddellijk zien of kritieke dossiers gevaar lopen. Door deze informatie maandelijks in het securityboard te bespreken, blijft device-compliance een vast agendapunt en geen ad-hocreactie.

De functie Invoke-ComplianceMonitoring in het script intune-device-compliance-policies.ps1 vertaalt deze inzichten naar reproduceerbare rapportages. De functie verzamelt per apparaat de laatste synchronisatietijd en de status van ieder gekoppeld compliancebeleid, markeert apparaten die langer dan vierentwintig uur niet hebben gesynchroniseerd en exporteert optioneel een CSV voor auditdoeleinden. Door de parameter -ExportPath te gebruiken, kan het rapport automatisch in een SharePoint-bibliotheek worden geplaatst waar retentiebeleid geldt. Het script berekent tevens of het overall compliancepercentage onder de drempel van achtennegentig procent duikt en geeft duidelijke waarschuwingen wanneer specifieke policies consequent achterblijven.

Naast automatische scripts is er een procesmatige laag nodig waarin het SOC, het werkplekteam en de servicedesk samenwerken. Het SOC configureert Azure Monitor alerts op basis van Graph-data zodat incidenttickets worden aangemaakt zodra het aantal non-compliant apparaten een vooraf ingestelde grens overschrijdt. Het werkplekteam eigent zich deze tickets binnen afgesproken doorlooptijden toe en registreert voortgang in het ITSM-systeem, terwijl de servicedesk voorbereid is op vragen van gebruikers doordat zij dezelfde rapportages inzien. Deze samenwerking wordt ondersteund door runbooks waarin staat hoe contact wordt opgenomen met gebruikers, welke tijdelijke toegangsbeperkingen gelden en wanneer escalatie naar het CISO-office noodzakelijk is.

Monitoring richt zich niet alleen op technische metrics maar ook op gedrag en trendanalyses. Door maandelijks te analyseren waarom apparaten non-compliant zijn, ontdekt de organisatie patronen zoals gebrekkige communicatie rond herstarts, verouderde applicaties die blokkeren of leveranciers die apparaten langdurig offline houden. Deze analyses worden vertaald naar verbeterplannen met duidelijke eigenaren, budget en deadlines. Zo wordt monitoring een feedbacklus die beleid, techniek en organisatie continu verfijnt, volledig in lijn met de eisen van de Nederlandse Baseline voor Veilige Cloud.

Remediatie, Uitzonderingen en Auditbestendigheid

Gebruik PowerShell-script intune-device-compliance-policies.ps1 (functie Invoke-RemediationGuide) – Geeft beheerders stap-voor-stap aanwijzingen voor het herstellen van non-compliant apparaten en het documenteren van uitzonderingen met WhatIf-ondersteuning..

Zelfs met strakke monitoring ontstaan situaties waarin apparaten non-compliant raken of waarin beleid tijdelijk versoepeld moet worden voor een kritieke operatie. Het remediatieproces beschrijft daarom stap voor stap hoe beheerders handelen zodra een apparaat de baseline verlaat. Het proces begint met het automatisch blokkeren van toegang via Conditional Access, gevolgd door een communicatiebericht aan de gebruiker en diens leidinggevende. Vervolgens bepaalt het werkplekteam of de oorzaak ligt bij ontbrekende updates, hardwarewijzigingen of bewuste policywijzigingen. Pas wanneer deze analyse is afgerond kan de toegang worden hersteld.

De functie Invoke-RemediationGuide in het script intune-device-compliance-policies.ps1 ondersteunt dit proces met concrete instructies. De functie zet de standaardacties uiteen: forceren van een Intune sync, opnieuw toepassen van complianceprofielen, controleren van notificaties en documenteren van de gekozen maatregel in het ITSM-systeem. Wanneer de -WhatIf schakelaar wordt gebruikt, krijgt het team een droge run van de stappen, handig voor trainingen of tabletop-oefeningen. Hierdoor blijft remediatie voorspelbaar en worden fouten in stresssituaties voorkomen.

Voor uitzonderingen wordt een apart spoor ingericht. Zodra een proceseigenaar een tijdelijke uitzondering aanvraagt, vult deze een risicobeoordeling in die beschrijft welke data wordt verwerkt, hoe lang de uitzondering duurt en welke compenserende maatregelen worden ingezet, zoals netwerksegmentatie of versnelde logging. Het patchboard of securityboard beoordeelt de aanvraag binnen twee werkdagen en slaat het besluit op in dezelfde bibliotheek als de Graph-exports. De einddatum wordt gemonitord door het script en door het ITSM-systeem, zodat uitzonderingen nooit stilzwijgend permanent worden.

Auditbestendigheid vereist tenslotte dat alle stappen traceerbaar zijn. Elke remediatieactie krijgt een ticketnummer, het script voegt bij export een hash toe zodat auditors de integriteit kunnen controleren en alle rapportages worden gekoppeld aan de juiste BIO- en NIS2-controls. Tijdens kwartaalreviews voert de organisatie steekproeven uit: men controleert of apparaten met hoge dataclassificatie daadwerkelijk binnen de afgesproken termijn zijn hersteld en of documentatie volledig is. De bevindingen worden direct gedeeld met het bestuur, waarmee device-compliance niet alleen operationeel maar ook bestuurlijk geborgd blijft.

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
<# .SYNOPSIS Intune Device Compliance Policies – Assessment, monitoring en remediatie. .DESCRIPTION Voert een baselinecontrole uit op Intune-compliancebeleid, genereert operationele rapportages en biedt remediatie-instructies volgens de Nederlandse Baseline voor Veilige Cloud. .NOTES Filename : intune-device-compliance-policies.ps1 Author : Nederlandse Baseline voor Veilige Cloud Version : 1.0 Related : content/m365/device-management/intune-device-compliance-policies.json #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph.DeviceManagement [CmdletBinding(DefaultParameterSetName = 'Assessment')] param( [Parameter(ParameterSetName = 'Assessment')] [switch]$Assessment, [Parameter(ParameterSetName = 'Monitoring')] [switch]$Monitoring, [Parameter(ParameterSetName = 'Remediation')] [switch]$Remediation, [switch]$LocalDebug, [string]$ExportPath, [switch]$WhatIf ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Intune Device Compliance Policies" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Initialize-IntuneContext { if ($LocalDebug) { Write-Verbose "LocalDebug actief: Graph-verbinding wordt overgeslagen." return } $context = Get-MgContext if (-not $context) { Write-Host "Verbinden met Microsoft Graph..." -ForegroundColor Yellow Connect-MgGraph -Scopes @( 'DeviceManagementConfiguration.Read.All', 'DeviceManagementManagedDevices.Read.All', 'DeviceManagementServiceConfig.Read.All' ) -ErrorAction Stop | Out-Null $context = Get-MgContext } if ($context.ApiVersion -ne 'beta') { Select-MgProfile -Name 'beta' } } function Invoke-PagedGraphRequest { param( [Parameter(Mandatory = $true)] [string]$Uri ) $results = @() $nextLink = $Uri do { $response = Invoke-MgGraphRequest -Method GET -Uri $nextLink -ErrorAction Stop if ($response.value) { $results += $response.value } else { $results += $response } $nextLink = $response.'@odata.nextLink' } while ($nextLink) return $results } function Get-ComplianceSampleData { $now = Get-Date return [pscustomobject]@{ Policies = @( [pscustomobject]@{ id = 'policy-win' displayName = 'Windows 11 Baseline' platform = 'windows10AndLater' lastModifiedDateTime = $now.AddDays(-5) assignments = @([pscustomobject]@{ target = 'EntraID:Windows-Prod' }) scheduledActionsForRule = @( [pscustomobject]@{ ruleName = 'Default' scheduledActionConfigurations = @( [pscustomobject]@{ actionType = 'block'; gracePeriodHours = 0 }, [pscustomobject]@{ actionType = 'notification'; gracePeriodHours = 4 } ) } ) }, [pscustomobject]@{ id = 'policy-android' displayName = 'Android Enterprise Baseline' platform = 'androidForWork' lastModifiedDateTime = $now.AddDays(-12) assignments = @([pscustomobject]@{ target = 'EntraID:Android-Prod' }) scheduledActionsForRule = @( [pscustomobject]@{ ruleName = 'Default' scheduledActionConfigurations = @( [pscustomobject]@{ actionType = 'block'; gracePeriodHours = 1 } ) } ) }, [pscustomobject]@{ id = 'policy-ios' displayName = 'iOS Baseline' platform = 'iOS' lastModifiedDateTime = $now.AddDays(-30) assignments = @([pscustomobject]@{ target = 'EntraID:iOS-Prod' }) scheduledActionsForRule = @( [pscustomobject]@{ ruleName = 'Default' scheduledActionConfigurations = @( [pscustomobject]@{ actionType = 'notification'; gracePeriodHours = 6 }, [pscustomobject]@{ actionType = 'block'; gracePeriodHours = 6 } ) } ) } ) Devices = @( [pscustomobject]@{ deviceName = 'RWS-LAP-021' userDisplayName = 'Inspecteur Digitale Zaken' complianceState = 'compliant' lastSyncDateTime = $now.AddHours(-6) policyStates = @( [pscustomobject]@{ policyDisplayName = 'Windows 11 Baseline'; complianceState = 'compliant' } ) }, [pscustomobject]@{ deviceName = 'Gemeente-TAB-884' userDisplayName = 'Teamleider Vergunningen' complianceState = 'nonCompliant' lastSyncDateTime = $now.AddHours(-30) policyStates = @( [pscustomobject]@{ policyDisplayName = 'Android Enterprise Baseline'; complianceState = 'nonCompliant' } ) }, [pscustomobject]@{ deviceName = 'ILT-iPad-114' userDisplayName = 'Inspecteur Luchtvaart' complianceState = 'compliant' lastSyncDateTime = $now.AddHours(-10) policyStates = @( [pscustomobject]@{ policyDisplayName = 'iOS Baseline'; complianceState = 'compliant' } ) } ) } } function Get-ComplianceInventory { Initialize-IntuneContext if ($LocalDebug) { return Get-ComplianceSampleData } $policyUri = "https://graph.microsoft.com/beta/deviceManagement/deviceCompliancePolicies?`$expand=assignments,scheduledActionsForRule(`$expand=scheduledActionConfigurations)" $deviceUri = "https://graph.microsoft.com/beta/deviceManagement/managedDevices?`$select=deviceName,userDisplayName,operatingSystem,lastSyncDateTime,platform,complianceState&`$expand=deviceCompliancePolicyStates(`$select=policyDisplayName,complianceState)&`$top=999" $policies = Invoke-PagedGraphRequest -Uri $policyUri $devices = Invoke-PagedGraphRequest -Uri $deviceUri return [pscustomobject]@{ Policies = $policies Devices = $devices } } function Invoke-PolicyAssessment { try { $inventory = Get-ComplianceInventory $policies = @($inventory.Policies) $issues = New-Object System.Collections.Generic.List[string] if (-not $policies -or $policies.Count -eq 0) { $issues.Add('Er zijn geen Intune-compliancepolicies gevonden in de tenant.') | Out-Null } $requiredPlatforms = @{ 'windows10AndLater' = 'Windows 10/11' 'androidForWork' = 'Android Enterprise' 'iOS' = 'iOS/iPadOS' } foreach ($platform in $requiredPlatforms.Keys) { $matching = $policies | Where-Object { $_.platform -eq $platform } if (-not $matching -or $matching.Count -eq 0) { $issues.Add("Voor platform $($requiredPlatforms[$platform]) ontbreekt een actief compliancebeleid.") | Out-Null } } foreach ($policy in $policies) { $assignments = if ($policy.PSObject.Properties['assignments']) { @($policy.assignments) } else { @() } if ($assignments.Count -eq 0) { $issues.Add("Policy '$($policy.displayName)' heeft geen assignments en wordt dus niet afgedwongen.") | Out-Null } $actions = @() if ($policy.PSObject.Properties['scheduledActionsForRule']) { foreach ($rule in $policy.scheduledActionsForRule) { if ($rule -and $rule.PSObject.Properties['scheduledActionConfigurations']) { $actions += @($rule.scheduledActionConfigurations) } } } if (-not ($actions | Where-Object { $_.actionType -match 'block' })) { $issues.Add("Policy '$($policy.displayName)' mist een blokkerende actie bij non-compliance.") | Out-Null } foreach ($action in $actions) { if ($action.PSObject.Properties['gracePeriodHours']) { $grace = [int]$action.gracePeriodHours if ($grace -gt 24) { $issues.Add("Policy '$($policy.displayName)' heeft een remediatieactie met $grace uur respijt (maximaal 24 toegestaan).") | Out-Null } } } if ($policy.PSObject.Properties['lastModifiedDateTime']) { $age = (Get-Date) - [datetime]$policy.lastModifiedDateTime if ($age.TotalDays -gt 90) { $issues.Add("Policy '$($policy.displayName)' is $([math]::Round($age.TotalDays,0)) dagen niet herzien.") | Out-Null } } } if ($issues.Count -eq 0) { Write-Host "COMPLIANT: alle gecontroleerde policies voldoen aan de baseline." -ForegroundColor Green return 0 } else { Write-Host "NON-COMPLIANT: $($issues.Count) aandachtspunten gevonden." -ForegroundColor Red $issues | ForEach-Object { Write-Host " - $_" -ForegroundColor Yellow } return 1 } } catch { Write-Host "ERROR tijdens policy-assessment: $_" -ForegroundColor Red return 2 } } function Invoke-ComplianceMonitoring { param( [string]$ExportPath ) try { $inventory = Get-ComplianceInventory $devices = @($inventory.Devices) if (-not $devices -or $devices.Count -eq 0) { Write-Host "Geen apparaatgegevens beschikbaar uit Intune." -ForegroundColor Yellow return 2 } $now = Get-Date $policyStates = @() foreach ($device in $devices) { $states = if ($device.PSObject.Properties['deviceCompliancePolicyStates']) { @($device.deviceCompliancePolicyStates) } elseif ($device.PSObject.Properties['policyStates']) { @($device.policyStates) } else { @() } $lastSync = if ($device.PSObject.Properties['lastSyncDateTime'] -and $device.lastSyncDateTime) { [datetime]$device.lastSyncDateTime } else { $null } $hoursSinceSync = if ($lastSync) { [math]::Round(($now - $lastSync).TotalHours, 1) } else { [double]::PositiveInfinity } if ($states.Count -eq 0) { $policyStates += [pscustomobject]@{ DeviceName = $device.deviceName User = $device.userDisplayName Policy = 'Geen beleid gekoppeld' Compliance = if ($device.PSObject.Properties['complianceState']) { $device.complianceState } else { 'unknown' } HoursSinceSync= $hoursSinceSync } continue } foreach ($state in $states) { $policyStates += [pscustomobject]@{ DeviceName = $device.deviceName User = $device.userDisplayName Policy = if ($state.PSObject.Properties['policyDisplayName']) { $state.policyDisplayName } else { 'Onbekend beleid' } Compliance = $state.complianceState HoursSinceSync= $hoursSinceSync } } } $policyGroups = $policyStates | Group-Object Policy | Sort-Object Name foreach ($group in $policyGroups) { $total = $group.Count $compliant = ($group.Group | Where-Object { $_.Compliance -eq 'compliant' }).Count $percentage = if ($total -eq 0) { 0 } else { [math]::Round(($compliant / $total) * 100, 2) } Write-Host ("Policy {0}: {1}% compliant ({2}/{3})" -f $group.Name, $percentage, $compliant, $total) -ForegroundColor Cyan } $alerts = $policyStates | Where-Object { $_.Compliance -notin @('compliant','notApplicable') -or $_.HoursSinceSync -gt 24 } if ($alerts.Count -eq 0) { Write-Host "Alle gecontroleerde apparaten voldoen aan de baseline." -ForegroundColor Green } else { Write-Host "Waarschuwing: $($alerts.Count) records vereisen aandacht (non-compliance of verouderde sync)." -ForegroundColor Yellow $alerts | Select-Object DeviceName, Policy, Compliance, HoursSinceSync | Format-Table -AutoSize | Out-String | Write-Host } if ($ExportPath) { $directory = Split-Path -Parent $ExportPath if ($directory -and -not (Test-Path $directory)) { New-Item -ItemType Directory -Path $directory -Force | Out-Null } $policyStates | Export-Csv -Path $ExportPath -NoTypeInformation -Encoding UTF8 Write-Host "Rapport geëxporteerd naar $ExportPath" -ForegroundColor Green } return ($alerts.Count -gt 0) ? 1 : 0 } catch { Write-Host "ERROR tijdens monitoring: $_" -ForegroundColor Red return 2 } } function Invoke-RemediationGuide { try { Write-Host "Remediatie-intentie voor Intune device compliance:" -ForegroundColor Yellow Write-Host "1. Forceer een Intune-sync via Remote actions of Company Portal en controleer of policies opnieuw worden geëvalueerd." -ForegroundColor Gray Write-Host "2. Pas zonodig het compliancebeleid opnieuw toe en controleer of notificatiesjablonen correcte taal en instructies bevatten." -ForegroundColor Gray Write-Host "3. Documenteer de oorzaak in het ITSM-ticket en registreer welke compenserende maatregel actief blijft totdat het apparaat weer compliant is." -ForegroundColor Gray Write-Host "4. Escaleer naar het patchboard wanneer een apparaat langer dan 24 uur non-compliant blijft of wanneer uitzonderingen moeten worden verlengd." -ForegroundColor Gray if ($WhatIf) { Write-Host "WhatIf actief: er zijn geen wijzigingen doorgevoerd; enkel instructies weergegeven." -ForegroundColor Yellow } return 0 } catch { Write-Host "ERROR tijdens remediatie-instructies: $_" -ForegroundColor Red return 2 } } try { switch ($PSCmdlet.ParameterSetName) { 'Assessment' { $exitCode = Invoke-PolicyAssessment exit $exitCode } 'Monitoring' { $exitCode = Invoke-ComplianceMonitoring -ExportPath $ExportPath exit $exitCode } 'Remediation' { $exitCode = Invoke-RemediationGuide exit $exitCode } default { Write-Host "Gebruik -Assessment, -Monitoring of -Remediation (optioneel -LocalDebug, -ExportPath, -WhatIf)." -ForegroundColor Yellow } } } catch { Write-Host "Onverwachte fout: $_" -ForegroundColor Red exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder afdwingbaar Intune-compliancebeleid kunnen onbeheerde of verouderde apparaten zich aanmelden op Microsoft 365, waardoor ransomware, datalekken en bestuurlijke sancties vrijwel onvermijdelijk worden zodra een incident plaatsvindt.

Management Samenvatting

Zet governance, ontwerp, monitoring en remediatie voor Intune-compliance centraal en automatiseer controles via Microsoft Graph, zodat alleen aantoonbaar veilige apparaten toegang houden tot kritieke cloudbronnen.