Public/Get-BfdEvent.ps1

function Get-BfdEvent {
    <#
    .SYNOPSIS
        Returns recent events (ring buffer of 500 per session), oldest first: Control packets sent/received (parsed into
        Message), StateChange, Drop (with the reason a packet was rejected), Echo, Fault and HookError.
    #>

    [CmdletBinding()]
    param(
        [string]$Name = '*',
        [ValidateSet('Control', 'StateChange', 'Drop', 'Echo', 'Fault', 'HookError')][string[]]$Type,
        [int]$Last = 50
    )
    $events = foreach ($S in @((Get-BfdRegistry).Bfd.Values)) {
        if ($S.Name -like $Name) { $S.Events.ToArray() }
    }
    if ($Type) { $events = $events | Where-Object { $_.Type -in $Type } }
    foreach ($e in @($events | Sort-Object Time | Select-Object -Last $Last)) {
        $msg = $null
        if ($e.Bytes -and $e.Bytes.Length -ge 24) { try { $msg = ConvertFrom-BfdControl $e.Bytes } catch { } }
        $e | Add-Member -NotePropertyName Message -NotePropertyValue $msg -PassThru -Force
    }
}