Log.ps1
# # Logging # $Global:LogFile = $null $Global:LogVerbose = $False Function Convert-ObjectToHashtable([psobject]$object) { $output = @{} $object.PSObject.Properties | ForEach-Object { if ($_.Value -is [PSCustomObject]) { $_.Value = Convert-ObjectToHashtable($_.Value) } $output.($_.Name) = $_.Value } return $output } Function Convert-ArrayToString([array] $array) { return "[" + (( $array.foreach({"$_"})) -join ', ') + "]" } Function Convert-HashToString([psobject]$hashtable) { return "@{" + ( $hashtable.keys.foreach( { $value = $hashtable[$_] if ($value -is [hashtable]) { "$_=$(Convert-HashToString $value)" } elseif ($value -is [array]) { "$_=$(Convert-ArrayToString $value)" } else { "$_=$value" } }) -join '; ' ) + "}" } Function LogInit([string]$logFile, [bool]$Clean, [bool]$Verbose) { $Global:LogFile = "$(Get-Location)\$logFile" $Global:LogVerbose = $Verbose if ($Clean) { $timestamp = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.ffffZ") "$($timestamp): New log" | Out-File -FilePath $Global:LogFile } Write-Host "Logging to $($Global:LogFile) Verbose $Verbose" } Function LogIt([string]$message, [bool]$echoToScreen = $True) { if ($echoToScreen) { Write-Host $message } $timestamp = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.ffffZ") "$($timestamp): $message" | Out-File -FilePath $Global:LogFile -Append } Function LogFatal([string]$message, [bool]$echoToScreen = $True) { LogIt $message $echoToScreen throw $message } |