Private/Get-ADPDEventLog.ps1

function Get-ADPDEventLog {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$LogName,

        [Parameter(Mandatory)]
        [datetime]$Since,

        [Parameter(Mandatory)]
        [ValidateRange(1, 5000)]
        [int]$MaximumEvents,

        [Parameter(Mandatory)]
        [bool]$IncludeMessage
    )

    try {
        $filter = @{ LogName = $LogName; StartTime = $Since }
        $events = @(Get-WinEvent -FilterHashtable $filter -MaxEvents $MaximumEvents -ErrorAction Stop | ForEach-Object {
                $message = $null
                if ($IncludeMessage) {
                    try {
                        $message = $_.Message
                    } catch {
                        $message = '<Event message unavailable>'
                    }
                }

                [pscustomobject]@{
                    Id          = $_.Id
                    Level       = $_.LevelDisplayName
                    TimeCreated = $_.TimeCreated
                    Provider    = $_.ProviderName
                    Message     = $message
                }
            })

        [pscustomobject]@{
            Name      = $LogName
            Available = $true
            Error     = $null
            Events    = $events
        }
    } catch {
        [pscustomobject]@{
            Name      = $LogName
            Available = $false
            Error     = $_.Exception.Message
            Events    = @()
        }
    }
}