internal/defender/Get-MdeConfiguration.ps1
|
function Get-MdeConfiguration { <# .SYNOPSIS Gets information about your organization's Defender-protected devices and their policies .DESCRIPTION Retrieves device inventory, configuration policies, and compliance information from Microsoft Graph API for use in MDE tests. .PARAMETER DisableCache Bypasses the Graph API response cache and fetches fresh data .EXAMPLE Get-MdeConfiguration Gets current MDE device and policy information. #> [CmdletBinding()] [OutputType([hashtable])] param( [switch]$DisableCache ) Write-Verbose "Getting managed devices from Microsoft Graph" $deviceParams = @{ RelativeUri = 'deviceManagement/managedDevices' ApiVersion = 'v1.0' Select = 'id,deviceName,operatingSystem,complianceState,managementAgent,azureADDeviceId,lastSyncDateTime' DisableCache = $DisableCache } $managedDevices = Invoke-MtGraphRequest @deviceParams if ($managedDevices) { foreach ($device in $managedDevices) { if ($device.lastSyncDateTime) { try { $parsedDate = [DateTime]::Parse($device.lastSyncDateTime) $device.lastSyncDateTime = $parsedDate.ToString("yyyy-MM-ddTHH:mm:ss.fffZ") } catch { Write-Verbose "Could not parse date for device $($device.deviceName): $($device.lastSyncDateTime)" } } } } Write-Verbose "Getting device configuration policies" $configParams = @{ RelativeUri = 'deviceManagement/configurationPolicies' ApiVersion = 'beta' DisableCache = $DisableCache } $configPolicies = Invoke-MtGraphRequest @configParams Write-Verbose "Getting device compliance policies" $complianceParams = @{ RelativeUri = 'deviceManagement/deviceCompliancePolicies' ApiVersion = 'v1.0' DisableCache = $DisableCache } $compliancePolicies = Invoke-MtGraphRequest @complianceParams Write-Verbose "Getting security baselines" $baselinesParams = @{ RelativeUri = 'deviceManagement/templates' ApiVersion = 'beta' Filter = "isof('microsoft.graph.securityBaselineTemplate')" DisableCache = $DisableCache } $securityBaselines = Invoke-MtGraphRequest @baselinesParams return @{ ManagedDevices = $managedDevices ConfigurationPolicies = $configPolicies CompliancePolicies = $compliancePolicies SecurityBaselines = $securityBaselines Timestamp = Get-Date } } |