private/review/purview/informationprotection/Invoke-ReviewPurviewInformationProtectionLabelPolicy.ps1

function Invoke-ReviewPurviewInformationProtectionLabelPolicy
{
    <#
    .SYNOPSIS
        Check if SharePoint Online Information Protection policies are set up and used.
    .DESCRIPTION
        Returns review object.
    .NOTES
        Requires the following modules:
        - ExchangeOnlineManagement
    .EXAMPLE
        Invoke-ReviewPurviewInformationProtectionLabelPolicy;
    #>


    [cmdletbinding()]
    param
    (
    )

    BEGIN
    {
        # Write progress.
        Write-Progress -Activity $MyInvocation.MyCommand -Status 'Running' -CurrentOperation $MyInvocation.MyCommand.Name -PercentComplete -1 -SecondsRemaining -1;

        # Write to log.
        Write-CustomLog -Category 'Microsoft Purview' -Subcategory 'Information Protection' -Message ("Getting label policies") -Level Verbose;

        # Get all label policies.
        $labelPolicies = Get-LabelPolicy -WarningAction SilentlyContinue;

        # Object array for storing policies.
        $policies = New-Object System.Collections.ArrayList;
    }
    PROCESS
    {
        # Foreach label policy.
        foreach ($labelPolicy in $labelPolicies)
        {
            # Boolean if the label policy valid.
            $valid = $true;

            # If the label policy is not enabled.
            if($false -eq $labelPolicy.Enabled)
            {
                # Set the policy to invalid.
                $valid = $false;
            }

            # If mode is not set to enforce.
            if('Enforce' -ne $labelPolicy.Mode)
            {
                # Set the policy to invalid.
                $valid = $false;
            }

            # If label policy is valid.
            if($true -eq $valid)
            {
                # Write to log.
                Write-CustomLog -Category 'Microsoft Purview' -Subcategory 'Information Protection' -Message ("Label policy '{0}' is valid" -f $labelPolicy.Name) -Level Verbose;

                # Add the policy to the list.
                $null = $policies.Add($labelPolicy);
            }
        }
    }
    END
    {
        # Bool for review flag.
        [bool]$reviewFlag = $false;

        # If review flag should be set.
        if ($policies.Count -eq 0)
        {
            # Should be reviewed.
            $reviewFlag = $true;
        }

        # Create new review object to return.
        [Review]$review = [Review]::new();

        # Add to object.
        $review.Id = 'b01a1187-5921-4b29-95fd-73e1af3c5285';
        $review.Category = 'Microsoft Purview';
        $review.Subcategory = 'Information Protection';
        $review.Title = 'Ensure SharePoint Online Information Protection policies are set up and used';
        $review.Data = $policies | Select-Object -Property Guid, Name, Enabled, Mode, Comment, Workload;
        $review.Review = $reviewFlag;

        # Print result.
        $review.PrintResult();

        # Return object.
        return $review;
    }
}