modules/Utilities/private/Trace-Output.ps1
# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. function Trace-Output { [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [System.String]$Message, [Parameter(Mandatory = $false)] [TraceLevel]$Level ) if(!$PSBoundParameters.ContainsKey('Level')) { $Level = [TraceLevel]::Information } # Verify we've made the working directory and trace file if([string]::IsNullOrEmpty((Get-TraceOutputFile))){ New-WorkingDirectory } $traceFile = (Get-TraceOutputFile) $callingFunction = (Get-PSCallStack)[1].Command # create custom object for formatting purposes $traceEvent = [PSCustomObject]@{ Computer = $env:COMPUTERNAME.ToUpper().ToString() TimestampUtc = [DateTime]::UtcNow.ToString('yyyy-MM-dd HH-mm-ss') FunctionName = $callingFunction Level = $Level.ToString() Message = $Message } # write the message to the console switch($Level){ 'Error' { "[{0}] {1}" -f $traceEvent.Computer, $traceEvent.Message | Write-Error } 'Exception' { "[{0}] {1}" -f $traceEvent.Computer, $traceEvent.Message | Write-Host -ForegroundColor:Red } 'Success' { "[{0}] {1}" -f $traceEvent.Computer, $traceEvent.Message | Write-Host -ForegroundColor:Green } 'Verbose' { if($VerbosePreference -ne [System.Management.Automation.ActionPreference]::SilentlyContinue) { "[{0}] {1}" -f $traceEvent.Computer, $traceEvent.Message | Write-Verbose } } 'Warning' { "[{0}] {1}" -f $traceEvent.Computer, $traceEvent.Message | Write-Warning } default { "[{0}] {1}" -f $traceEvent.Computer, $traceEvent.Message | Write-Host -ForegroundColor:Cyan } } # write the event to trace file to be used for debugging purposes $traceEvent | Export-Csv -Append -NoTypeInformation -Path $traceFile.FullName } |