functions/Write-ErrorLog.ps1
function Write-ErrorLog { [cmdletbinding(DefaultParameterSetName='MessageTemplate')] param( [Parameter(Mandatory = $true, Position = 0, ParameterSetName = 'MessageTemplate')] [Parameter(Mandatory = $true, ParameterSetName = 'MessageTemplateWithProperties')] [Parameter(Mandatory = $true, ParameterSetName = 'Excetion')] [Parameter(Mandatory = $true, ParameterSetName = 'ExcetionWithProperties')] [string]$MessageTemplate, [Parameter(Mandatory = $true, ParameterSetName = 'Excetion')] [Parameter(Mandatory = $true, ParameterSetName = 'ExcetionWithProperties')] [System.Exception]$Exception, [Parameter(Mandatory = $true, ParameterSetName = 'ExcetionWithProperties')] [Parameter(Mandatory = $true, ParameterSetName = 'MessageTemplateWithProperties')] [object[]]$PropertyValues, [Parameter(Mandatory = $false)] [switch]$PassThru ) switch ($PsCmdlet.ParameterSetName){ 'MessageTemplate'{ [Serilog.Log]::Logger.Error($MessageTemplate) if(-not (Test-Logger)){ Write-Error -Message $MessageTemplate } } 'MessageTemplateWithProperties'{ [Serilog.Log]::Logger.Error($MessageTemplate, $PropertyValues) if(-not (Test-Logger)){ Write-Error -Message (Get-CollapsedMessage -MessageTemplate $MessageTemplate -PropertyValues $PropertyValues) } } 'Excetion'{ [Serilog.Log]::Logger.Error($Exception, $MessageTemplate) if(-not (Test-Logger)){ Write-Error -Exception $Exception -Message $MessageTemplate } } 'ExcetionWithProperties'{ [Serilog.Log]::Logger.Error($Exception, $MessageTemplate, $PropertyValues) if(-not (Test-Logger)){ Write-Error -Exception $Exception -Message (Get-CollapsedMessage -MessageTemplate $MessageTemplate -PropertyValues $PropertyValues) } } } if($PassThru){ Get-CollapsedMessage -MessageTemplate $MessageTemplate -PropertyValues $PropertyValues } } |