Public/Write-ToLogAnalytics.ps1

function Write-ToLogAnalytics {
    [CmdletBinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '')]
    param
    (
        [Parameter(Mandatory = $true,
            ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
        [ValidateNotNullOrEmpty()]
        [psobject[]]
        $PSObject,

        [Parameter(Mandatory = $false, HelpMessage = 'Name for Table to store Events in Azure Log Analytics',
            ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
        [string]
        $ALTableIdentifier,

        [Parameter(Mandatory = $false,
            ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
        [string]
        $ALWorkspaceID,

        [Parameter(Mandatory = $false,
            ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
        [string]
        $WorkspacePrimaryKey,

        [Parameter(Mandatory = $true,
            ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
        [DateTime]
        $invocationStartTime,

        [Parameter(Mandatory = $true,
            ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
        [DateTime]
        $invocationEndTime

    )


    process {
        $batchId = [System.Guid]::NewGuid()
        $ObjectToAzureLogs = $PSObject.PSObject.Copy()
        $ObjectToAzureLogs | Add-Member -MemberType NoteProperty -Name 'InvocationId' -Value ([System.Guid]::NewGuid())
        $ObjectToAzureLogs | Add-Member -MemberType NoteProperty -Name 'invocationStartTime' -Value $invocationStartTime
        $ObjectToAzureLogs | Add-Member -MemberType NoteProperty -Name 'invocationEndTime' -Value $invocationEndTime
        $ObjectToAzureLogs | Add-Member -MemberType NoteProperty -Name 'BatchId' -Value $BatchId
        $ObjectToAzureLogs | Add-Member -MemberType NoteProperty -Name 'SourceComputer' -Value ($env:computername)
        $exportArguments = @{
            ALWorkspaceID       = $ALWorkspaceID
            WorkspacePrimaryKey = $WorkspacePrimaryKey
            ALTableIdentifier   = $ALTableIdentifier
            TimeStampField      = $invocationStartTime
            PSObject            = $ObjectToAzureLogs
        }
        Write-Verbose -Message "Writing {$($ObjectToAzureLogs.Count)} Objects to Azure Log with: WorkspaceID - {$ALWorkspaceID}, BatchID - {$BatchId} into Table - {$ALTableIdentifier}"

        $result = Export-ObjectToLogAnalytics @exportArguments
        if ($result -ne 200) {
            Write-Error -Message "Something went wrong with exporting to Azure Log - {ErrorCode: $($result.ErrorCode)}"
        }
    }
}