tests/Test-Assessment.24543.ps1
<# .SYNOPSIS #> function Test-Assessment-24543 { [CmdletBinding()] param() #region Data Collection Write-PSFMessage '🟦 Start' -Tag Test -Level VeryVerbose $activity = "Checking Compliance policy assignment for iOS/iPadOS devices" Write-ZtProgress -Activity $activity -Status "Getting compliance policies" # Query 1: List all compliance policies for iOS/iPadOS in Intune $compliancePoliciesUri = "deviceManagement/deviceCompliancePolicies" $allCompliancePolicies = Invoke-ZtGraphRequest -RelativeUri $compliancePoliciesUri -ApiVersion v1.0 # Filter for iOS/iPadOS compliance policies $iOSCompliancePolicies = $allCompliancePolicies | Where-Object { $_.'@odata.type' -eq '#microsoft.graph.iosCompliancePolicy' -or $_.'@odata.type' -eq '#microsoft.graph.iosDeviceCompliancePolicy' } #endregion Data Collection #region Assessment Logic $passed = $false $testResultMarkdown = "" # Check if at least one iOS compliance policy exists if ($iOSCompliancePolicies.Count -gt 0) { Write-ZtProgress -Activity $activity -Status "Checking policy assignments" # Query 2: Check assignment of iOS compliance policies $policiesWithAssignments = @() foreach ($policy in $iOSCompliancePolicies) { $assignmentsUri = "deviceManagement/deviceCompliancePolicies/$($policy.id)/assignments?`$select=target" $assignments = Invoke-ZtGraphRequest -RelativeUri $assignmentsUri -ApiVersion v1.0 $policyWithAssignments = $null if ($assignments -and $assignments.Count -gt 0) { $isAssigned = $true } else { $isAssigned = $false } # Add assignment info to policy object $policyWithAssignments = $policy | Add-Member -NotePropertyName 'assignments' -NotePropertyValue $assignments -Force -PassThru | Add-Member -NotePropertyName 'isAssigned' -NotePropertyValue $isAssigned -Force -PassThru $policiesWithAssignments += $policyWithAssignments } # Check if at least one policy is assigned $assignedPolicies = $policiesWithAssignments | Where-Object { $_.isAssigned -eq $true } if ($assignedPolicies.Count -gt 0) { $passed = $true $testResultMarkdown = "At least one compliance policy for iOS/iPadOS exists and is assigned.`n`n%TestResult%" } else { $passed = $false $testResultMarkdown = "No compliance policy for iOS/iPadOS exists or none are assigned.`n`n%TestResult%" } } else { $passed = $false $testResultMarkdown = "No compliance policy for iOS/iPadOS exists or none are assigned.`n`n%TestResult%" } #endregion Assessment Logic #region Report Generation # Build the detailed sections of the markdown # Define variables to insert into the format string $reportTitle = "iOS/iPadOS Compliance Policies" $tableRows = "" if ($iOSCompliancePolicies.Count -gt 0) { # Create a here-string with format placeholders {0}, {1}, etc. $formatTemplate = @' ## {0} | Policy Name | Status | Assignment Target | | :---------- | :----- | :---------------- | {1} '@ foreach ($policyWithAssignments in $policiesWithAssignments) { $portalLink = 'https://intune.microsoft.com/#view/Microsoft_Intune_DeviceSettings/DevicesMenu/~/compliance' $status = if ($policyWithAssignments.isAssigned) { "✅ Assigned" } else { "❌ Not assigned" } $assignmentTarget = 'None' if ($policyWithAssignments.assignments -and $policyWithAssignments.assignments.Count -gt 0) { $assignmentTarget = Get-PolicyAssignmentTarget -Assignments $policyWithAssignments.assignments } $tableRows += @" | [$(Get-SafeMarkdown($policyWithAssignments.displayName))]($portalLink) | $status | $assignmentTarget | "@ } # Format the template by replacing placeholders with values $mdInfo = $formatTemplate -f $reportTitle, $tableRows } else { $mdInfo = "No iOS/iPadOS compliance policies found in this tenant.`n" } # Replace the placeholder with the detailed information $testResultMarkdown = $testResultMarkdown -replace "%TestResult%", $mdInfo #endregion Report Generation $params = @{ TestId = '24543' Title = 'Compliance policy assignment for iOS/iPadOS devices' Status = $passed Result = $testResultMarkdown } Add-ZtTestResultDetail @params } |