private/entraid/Get-EidConditionalAccessPolicySession.ps1

function Get-EidConditionalAccessPolicySession
{
    <#
    .SYNOPSIS
        Get Entra conditional access policy session controls.
    .DESCRIPTION
        Get session controls from a conditional access policy (e.g. app enforced restrictions, sign-in frequency, persistent browser).
    .PARAMETER PolicyId
        Guid format such as "0ee5b3dc-f9ce-4414-b93b-aea03ef7e108" (without quotes).
    .EXAMPLE
       Get-EidConditionalAccessPolicySession -PolicyId "0ee5b3dc-f9ce-4414-b93b-aea03ef7e108";
    #>

    [cmdletbinding()]
    [OutputType([PSCustomObject])]
    param
    (
        # Policy ID.
        [Parameter(Mandatory = $true, Position = 0, ValueFromPipelineByPropertyName = $true)]
        [ValidateNotNullOrEmpty()]
        [ValidateScript({ Test-Guid -InputObject $_ })]
        [string]$PolicyId
    )

    begin
    {
        # Write to log.
        $customProgress = Write-CustomProgress -Activity $MyInvocation.MyCommand.Name -CurrentOperation ('Retrieving Entra conditional access policy session for policy ({0})' -f $PolicyId);

        # Get conditional access policy by id.
        $entraConditionalAccessPolicy = Get-EntraConditionalAccessPolicy `
            -PolicyId $PolicyId `
            -ErrorAction SilentlyContinue;

        # If policy is null.
        if ($null -eq $entraConditionalAccessPolicy)
        {
            # Write to log.
            Write-CustomLog -Message ("No conditional access policy found with ID '{0}'" -f $PolicyId) -Level 'Verbose';

            # Throw exception.
            throw "No conditional access policy found with ID '$PolicyId'";
        }

        # Get session controls.
        $sessionControls = $entraConditionalAccessPolicy.SessionControls;

        # Create custom object.
        $result = [PSCustomObject]@{
            'AppEnforcedRestrictions'         = $false;
            'ConditionalAccessAppControl'     = $false;
            'ConditionalAccessAppControlType' = $null;
            'SignInFrequency'                 = $false;
            'SignInFrequencySettings'         = [PSCustomObject]@{
                'Value'             = $null;
                'Type'              = $null;
                'FrequencyInterval' = $null;
            };
            'PersistentBrowser'               = $false;
            'PersistantBrowserMode'           = $null;
            #'CustomContinuousAccessEvaluation' = $false;
            'ResilientDefault'                = $false;
            #'RequireTokenProtection' = $false;
            #'GlobalSecureAccessProfile' = $false;
        };
    }
    process
    {
        # If app enforced restrictions is enabled.
        if ($true -eq $sessionControls.ApplicationEnforcedRestrictions.IsEnabled)
        {
            # Set app enforced restrictions to true.
            $result.AppEnforcedRestrictions = $true;
        }

        # If conditional access app control is enabled.
        if ($true -eq $sessionControls.CloudAppSecurity.IsEnabled)
        {
            # Set conditional access app control to true.
            $result.ConditionalAccessAppControl = $true;

            # Set conditional access app control type.
            $result.ConditionalAccessAppControlType = $sessionControls.CloudAppSecurity.CloudAppSecurityType;
        }

        # If sign-in frequency is enabled.
        if ($true -eq $sessionControls.SignInFrequency.IsEnabled)
        {
            # Set sign-in frequency to true.
            $result.SignInFrequency = $true;

            # Set sign-in frequency settings.
            $result.SignInFrequencySettings.Value = $sessionControls.SignInFrequency.Value;
            $result.SignInFrequencySettings.Type = $sessionControls.SignInFrequency.Type;
            $result.SignInFrequencySettings.FrequencyInterval = $sessionControls.SignInFrequency.FrequencyInterval;
        }

        # If persistent browser is enabled.
        if ($true -eq $sessionControls.PersistentBrowser.IsEnabled)
        {
            # Set persistent browser.
            $result.PersistentBrowser = $true;

            # Set persistent browser mode.
            $result.PersistantBrowserMode = $sessionControls.PersistentBrowser.Mode;
        }

        # If default resilient access is enabled.
        if ($true -eq $sessionControls.ResilientDefault.IsEnabled)
        {
            # Set default resilient access to true.
            $result.ResilientDefault = $true;
        }
    }
    end
    {
        # Write to log.
        Write-CustomProgress @customProgress;

        # Return result.
        return $result;
    }
}