core/modules/monkeylogger/private/helpers/Get-FormattedMessage.ps1
# Monkey365 - the PowerShell Cloud Security Tool for Azure and Microsoft 365 (copyright 2022) by Juan Garrido # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specIfic language governing permissions and # limitations under the License. Function Get-FormattedMessage { <# .SYNOPSIS .DESCRIPTION .INPUTS .OUTPUTS .EXAMPLE .NOTES Author : Juan Garrido Twitter : @tr1ana File Name : Get-FormattedMessage Version : 1.0 .LINK https://github.com/silverhack/monkey365 #> [cmdletbinding()] [OutputType([System.String])] Param ( [Parameter(Mandatory=$True, ValueFromPipeline = $True, HelpMessage="Log stream")] [System.Management.Automation.InformationRecord]$Log ) Begin{ $formattedMessage = $null } Process{ Try{ #Check Log Level If($null -eq $Log.Level -or [String]::IsNullOrEmpty($Log.Level)){ $Log.Level = 'info' } Else{ $Log.Level = $Log.Level.ToString().ToLower(); } #Process message If($Log.MessageData -is [System.Management.Automation.ErrorRecord]){ Try{ If($null -ne $Log.MessageData.PsObject.Properties.Item('InvocationInfo') -and $null -ne $Log.MessageData.InvocationInfo){ If($null -ne $Log.MessageData.InvocationInfo.PsObject.Properties.Item('PositionMessage')){ $position = $Log.MessageData.InvocationInfo.PositionMessage } Else{ $position = $null } } Else{ $position = $null } } Catch{ $position = $null } $formattedMessage = ("[{0}] - [{1}] - {2}. LineNumber: {3} - exception - {4} - {5}" -f ` $Log.TimeGenerated.ToUniversalTime().ToString('HH:mm:ss:fff'), ` $Log.Source, ` $Log.MessageData.Exception.Message, ` $position, ` $Log.Computer, ` [system.String]::Join(", ", $Log.Tags)) } ElseIf($Log.MessageData -is [exception]){ Try{ If($null -ne $Log.MessageData.PsObject.Properties.Item('InvocationInfo')){ $position = $Log.MessageData.InvocationInfo.PositionMessage } Else{ $position = $null } } Catch{ $position = $null } $formattedMessage = ("[{0}] - [{1}] - {2}. LineNumber: {3} - exception - {4} - {5}" -f ` $Log.TimeGenerated.ToUniversalTime().ToString('HH:mm:ss:fff'), ` $Log.Source, ` $Log.MessageData, ` $position, ` $Log.Computer, ` [system.String]::Join(", ", $Log.Tags)) } ElseIf($Log.MessageData -is [System.AggregateException]){ $formattedMessage = ("[{0}] - [{1}] - {2} - {3} - {4} - {5}" -f ` $Log.TimeGenerated.ToUniversalTime().ToString('HH:mm:ss:fff'), ` $Log.Source, ` $Log.MessageData.Exception.InnerException.Message, ` $Log.Level.ToString().ToLower(), ` $Log.Computer, ` [system.String]::Join(", ", $Log.Tags)) } ElseIf($Log.MessageData -is [String]){ $formattedMessage = '[{0}] - [{1}] - {2} - {3} - {4} - {5}' -f ` $Log.TimeGenerated.ToUniversalTime().ToString('HH:mm:ss:fff'), ` $Log.Source, ` $Log.MessageData, ` $Log.Level.ToString().ToLower(), ` $Log.Computer, ` [system.String]::Join(", ", $Log.Tags) } Else{ $formattedMessage = '[{0}] - [{1}] - {2} - {3} - {4} - {5}' -f ` $Log.TimeGenerated.ToUniversalTime().ToString('HH:mm:ss:fff'), ` $Log.Source, ` ($Log.MessageData | Out-String), ` $Log.Level.ToString().ToLower(), ` $Log.Computer, ` [system.String]::Join(", ", $Log.Tags) } If($null -ne $formattedMessage){ return $formattedMessage } Else{ return [string]::Empty } } Catch{ Write-Verbose ($Script:messages.UnableToFormatMessage -f $Log.MessageData) } } } |