Private/Controls/Resolve-CASessionControl.ps1

function Resolve-CASessionControl {
    <#
    .SYNOPSIS
        Evaluates the session controls for a Conditional Access policy.
    
    .DESCRIPTION
        This function evaluates the session controls of a Conditional Access policy and returns
        the applicable session controls.
    
    .PARAMETER Policy
        The Conditional Access policy to evaluate.
    
    .EXAMPLE
        Resolve-CASessionControl -Policy $policy
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [object]$Policy
    )
    
    # If no session controls specified, return empty array
    if (-not $Policy.SessionControls) {
        return @{
            SessionControlsApplied = @()
        }
    }
    
    $sessionControls = @()
    
    # Check app enforced restrictions
    if ($Policy.SessionControls.ApplicationEnforced -and $Policy.SessionControls.ApplicationEnforced.IsEnabled) {
        $sessionControls += "App enforced restrictions"
    }
    
    # Check Cloud App Security
    if ($Policy.SessionControls.CloudAppSecurity -and $Policy.SessionControls.CloudAppSecurity.IsEnabled) {
        $mode = $Policy.SessionControls.CloudAppSecurity.CloudAppSecurityType
        $sessionControls += "Microsoft Defender for Cloud Apps: $mode"
    }
    
    # Check sign-in frequency
    if ($Policy.SessionControls.SignInFrequency -and $Policy.SessionControls.SignInFrequency.IsEnabled) {
        $value = $Policy.SessionControls.SignInFrequency.Value
        $type = $Policy.SessionControls.SignInFrequency.Type
        $sessionControls += "Sign-in frequency: $value $type"
    }
    
    # Check persistent browser
    if ($Policy.SessionControls.PersistentBrowser -and $Policy.SessionControls.PersistentBrowser.IsEnabled) {
        $mode = $Policy.SessionControls.PersistentBrowser.Mode
        $sessionControls += "Persistent browser session: $mode"
    }
    
    # Check continuous access evaluation
    if ($Policy.SessionControls.ContinuousAccessEvaluation -and $Policy.SessionControls.ContinuousAccessEvaluation.Mode) {
        $mode = $Policy.SessionControls.ContinuousAccessEvaluation.Mode
        $sessionControls += "Continuous access evaluation: $mode"
    }
    
    # Check resilience defaults
    if ($Policy.SessionControls.DisableResilienceDefaults) {
        $sessionControls += "Resilience defaults disabled"
    }
    
    return @{
        SessionControlsApplied = $sessionControls
    }
}