Private/ConvertFrom-IntuneAccessActionName.ps1

function ConvertFrom-IntuneAccessActionName {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)] [string] $Action
    )

    $trimmed = $Action -replace '^Microsoft\.Intune_', ''
    $resource = 'Other'
    $operation = $trimmed

    if ($trimmed -match '^(.+)[_/]([^_/]+)$') {
        $resource = $Matches[1] -replace '_', ' '
        $operation = $Matches[2] -replace '_', ' '
    }

    $friendlyResource = [regex]::Replace($resource, '(?<=[a-z0-9])(?=[A-Z])', ' ')
    $friendlyOperation = [regex]::Replace($operation, '(?<=[a-z0-9])(?=[A-Z])', ' ')
    if ($friendlyOperation.Length -gt 0) {
        $friendlyOperation = $friendlyOperation.Substring(0, 1).ToUpperInvariant() + $friendlyOperation.Substring(1)
    }

    return [PSCustomObject] @{
        RawAction          = $Action
        Resource           = $friendlyResource
        Operation          = $friendlyOperation
        FriendlyActionName = "$friendlyResource / $friendlyOperation"
    }
}