tooling/LoggingTypes/ConsoleLogger.xscript.ps1
#:xheader: #Type=LoggingType; #:xheader: function WriteColor() { Param ( [string] $text = $(Write-Error "You must specify some text"), [switch] $NoNewLine = $false ) $startColor = $host.UI.RawUI.ForegroundColor; # $regex = ([regex]'(.+?)(?:\{(red|cyan|green|blue|magenta)\}|$)(.*)') # while(-not ([String]::IsNullOrEmpty($text))){ # $before = $regex.Replace($text,'$1') # $color = $regex.Replace($text,'$2') # $after = $regex.Replace($text,'$3') # if ($_ -in [enum]::GetNames("ConsoleColor")) { # $host.UI.RawUI.ForegroundColor = ($_ -as [System.ConsoleColor]); # } # } $text.Split( [char]"{", [char]"}" ) | ForEach-Object { $i = 0; } { if ($i % 2 -eq 0) { Write-Host $_ -NoNewline; } else { if ($_ -in [enum]::GetNames("ConsoleColor")) { $host.UI.RawUI.ForegroundColor = ($_ -as [System.ConsoleColor]); } else{ Write-Host "{$($_)}" -NoNewline; } } $i++; } if (!$NoNewLine) { Write-Host; } $host.UI.RawUI.ForegroundColor = $startColor; } return @{ Init = { Param([ConfigAutomationContext] $context, [UILogger]$logger) [Helper]::SetPropertyIfNotExists($logger, "string", "Indention", "") }; Log = { Param([ConfigAutomationContext] $context, [UILogger]$logger, [string] $log) WriteColor "$($logger.Indention)$log" }; Indention = { Param([ConfigAutomationContext] $context, [UILogger]$logger, [int] $indention) $indentionSize = 2 $indentionChars = (@(0..$indentionSize) | Foreach-Object {" "}) -join "" if($indention -gt 0){ $logger.Indention += (@(0..$indention) | Foreach-Object {$indentionChars}) -join "" } elseif($indention -lt 0){ $logger.Indention = $logger.Indention.Substring($indentionSize) } else{ throw "Unable to indent by 0" } }; Milestone = { Param([ConfigAutomationContext] $context, [UILogger]$logger, [string] $message, [string] $type) WriteColor "`r`n$($logger.Indention):: $type - $message ::`r`n" } } |