Public/Get-Event.ps1

function Get-Event {
    [CmdletBinding()]
    param (
        [Parameter(
            Position=0, 
            Mandatory=$false,
            ValueFromPipelineByPropertyName=$true
        )]
        [string]$Host = $Script:Host,

        [Parameter(
            Position=1, 
            Mandatory=$false,
            ValueFromPipelineByPropertyName=$true
        )]
        [string]$SessionKey = $Script:SessionKey,

        [Parameter(
            ValueFromPipelineByPropertyName=$true
        )]
        [switch]$UseSSL = $Script:UseSSL,

        [Parameter(
            ValueFromPipelineByPropertyName=$true
        )]
        [switch]$IgnoreCertificateErrors = $Script:IgnoreCertificateErrors,

        [Parameter()]
        [int]$Id,

        [Parameter()]
        [int]$Type,

        [Parameter()]
        [int]$PersonId,

        [Parameter()]
        [int]$DeviceId,

        [Parameter()]
        [ValidateRange(1,250)]
        [int]$Limit = 250
    )
    
    begin {
        if($IgnoreCertificateErrors) {
            [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
        }
    }
    
    process {
        $endPoint       = "api/events"
        $method         = "GET"
        $contentType    = "application/json"
        $uri            = "http" + $(if($UseSSL) { "s" }) + "://$($Host)/$($endPoint)"
        
        $headers = @{
            Authorization=$SessionKey;
        }
        $query = @{
            limit=$Limit;
        }

        if($Type) {
            $query.Add("type", $Type)
        }

        if($PersonId) {
            $query.Add("personId", $PersonId)
        }

        if($DeviceId) {
            $query.Add("deviceId", $DeviceId)
        }

        if($Id) {
            $uri = "$uri/$Id"
        }

        Write-Verbose -Message "$($method) $($uri) $($contentType)"
        Write-Verbose -Message "Query:`n$(ConvertTo-Json $query)"

        $message = @{
            Uri=$uri;
            Method=$method;
            Body=$query;
            ContentType=$contentType;
            Headers=$headers;
            UseBasicParsing=$true;
        }
        try {
            $response = Invoke-RestMethod @message
        }
        catch {
            throw $_
            return
        }
        $response | ForEach-Object {
            New-Object -TypeName PSObject -Property @{
                Id=$_.id;
                Type=$_.type;
                Description=$_.description;
                PersonId=$_.personId;
                PersonName=$_.personName;
                DeviceId=$_.deviceId;
                DeviceName=$_.deviceName;
                Timestamp=$_.timestamp;
                DateTime=([DateTime]"1/1/1970").AddSeconds($_.timestamp)
            }
        }
    }

    end {
        [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $null }
    }
}